Как рисовать сотни точек используя XAML?

Я реализую приложение, в котором я должен рисовать на экране точечную матрицу, aproximandamente 90*30. Поскольку они видят, - много моментов и у меня есть сомнения относительно как противостоять проблеме.

Я издаю:

Я должен симулировать Display точечной матрицы, код в C# - массив 90*30 с 0, где led гаснет, и 1, где led зажигается. Я должен рисовать на основании этого массива, выключений черного цвета, зажигания мишени

Я начал играть с кодом создавая 2700 объектов типа Ellipse, используя эту функцию помещаю первые 30 в stack вертикальная панель и потом это добавляю к другому горизонтальному stackpanel, называю эту же самую функцию 90 раз и получаю массив. Так:

public void CreateDotsColumn() {
    var DotStack =
        new StackPanel() { Orientation = Orientation.Vertical };

    for (int i = 0; i < 30; i++) {
        DotStack.Children.Add(
            new Ellipse()
            {
                Width = 5.0,
                Height = 5.0,
                Fill = new SolidColorBrush(Colors.Black),
                Margin = new Thickness(0.1)
            });
    }
    HorizontalDotStackPanel.Children.Add(DotStack);
}

Считало это ужасной практикой кроме того, что использовало 70mb памяти. Я не нахожу лучшей формы, чего-то как контроль, который позволял бы мне рисовать на экране пиксель в пиксель, как он бы это сделал в PyGame например.

0
задан 22.03.2016, 19:07
1 ответ

Эта tГ©cnica

Updating points in PointCollection

мне кажется очень хорошей

Ты определяешь одну DataTemplate, где он использует TranslateTransform, чтобы показывать позицию каждой точки на основании данных о ViewModel

Entonces, хотя только array punton определять с cordenadas X, - и ты можешь posicionar каждый. Важная эта часть в здесь

<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>

позволяя позицию Ellipse внутри canvas.

<ItemsControl ItemsSource="{Binding Bulbs}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Canvas HorizontalAlignment="Left" VerticalAlignment="Top">
                <Ellipse Fill="Blue" Width="10" Height="10">
                    <Ellipse.RenderTransform>
                        <TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
                    </Ellipse.RenderTransform>
                </Ellipse>
            </Canvas>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

В твоем случае ты снял бы линию, так как ты только хочешь определить точки массива

1
ответ дан 24.11.2019, 14:42
  • 1
    Я осуществил этот soluci и # 243; n, она хорошая, потому что он обновляет autom и # 225; ticamente вид благодаря binding. Но потрати 90mb памяти в средней величине, нарисовав 2700 точек, и которая быть должен обновлять все их, произведи заметную задержку. Какая-то идея, чтобы это оптимизировать? – alecardv 23.03.2016, 19:58
  • 2
    2700 точек - достаточно высокое число, ясно, что данные о координатах точек не производят это потребление памяти, но она была бы темой render. Приложение ты ощущаешься, что relentiza это визуально или только тема tama и # 241; или зянятой памяти? – Leandro Tuttini 23.03.2016, 20:13
  • 3
    Одинокий tama и # 241; или зянятой памяти. – alecardv 23.03.2016, 20:21

Теги

Похожие вопросы