Я создаю приложение для рулона пианино в WPF / XAML, и в нем я хочу сетку с линиями разной толщины, вот так:
![Piano Roll](https://i.stack.imgur.com/TUE0I.png)
Эти строки добавляются динамически каждый раз, когда мне нужно добавить новую полосу музыки. Они не границы; каждый из них - свой отдельный объект 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 и не могу найти решение для этих линий сетки, которое делает то, что я хочу, и не замедляет все. Мои требования:
- Различная толщина для каждой линии.
- Регулируемая позиция.
- Возможность динамического добавления музыкальной линейки с помощью кода.
Любая помощь?