Линии сетки, вызывающие проблемы с производительностью в WPF - PullRequest
0 голосов
/ 30 апреля 2019

Я создаю приложение для рулона пианино в WPF / XAML, и в нем я хочу сетку с линиями разной толщины, вот так:

Piano Roll

Эти строки добавляются динамически каждый раз, когда мне нужно добавить новую полосу музыки. Они не границы; каждый из них - свой отдельный объект Line, добавленный к холсту, наложенному на рояль. Я добавляю их, используя следующий цикл:

for (int j = 1; j <= 32; j++)
{
    // Drawing the vertical grid lines with varying thickness.
    if (j % 32 == 0) thickness = 2.3;
    else if (j % 16 == 0) thickness = 1.1;
    else if (j % 8 == 0) thickness = 0.9;
    else if (j % 4 == 0) thickness = 0.6;
    else if (j % 2 == 0) thickness = 0.4;
    else thickness = 0.2;

    Line gridLine = new Line
    {
        Stroke = (Brush)this.Resources["GridLineColour"],
        X1 = 0,
        X2 = 0,
        Y1 = 0,
        Y2 = height,
        HorizontalAlignment = HorizontalAlignment.Left,
        VerticalAlignment = VerticalAlignment.Center,
        StrokeThickness = thickness
    };

    Panel.SetZIndex(gridLine, 2);
    Canvas.SetLeft(gridLine, j * thirtySecondNote + barStart);
    Canvas.SetTop(gridLine, 7);

    gridLines.Add(gridLine);
    cnvGridLines.Children.Add(gridLine);
}

Это действительно не работает для меня, потому что, когда я уменьшаю масштаб и на экране появляется много строк, приложение сильно замедляется, когда я пытаюсь прокрутить. Я уверен, что проблема в линиях, потому что если я установил видимость линий сетки скрытой, программа будет работать нормально.

Я довольно новичок в WPF и не могу найти решение для этих линий сетки, которое делает то, что я хочу, и не замедляет все. Мои требования:

  • Различная толщина для каждой линии.
  • Регулируемая позиция.
  • Возможность динамического добавления музыкальной линейки с помощью кода.

Любая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...