Мне нужно нарисовать линии сетки на фоне холста, на котором будут размещены другие элементы управления.
Я попытался создать StreamGeometry, используя его для рисования линий, и получить его, назначенный DrawingBrush. Однако я считаю, что если StreamGeometry имеет слишком много строк, программа становится вялой после назначения DrawingBrush для Canvas.
Есть ли в любом случае линии сетки "перед рендерингом" и присвоения ее холсту?
Я пытался Freeze()
использовать кисть и геометрию, но это не помогло. Какие еще варианты у меня есть?
Вот мой код:
public void RenderGrid()
{
this.UpdateGrid();
Pen grid_pen = new Pen(Brushes.Blue, 0.1);
StreamGeometry sg = new StreamGeometry();
DrawingBrush b = new DrawingBrush();
GeometryDrawing gd = new GeometryDrawing();
gd.Geometry = sg;
gd.Pen = grid_pen;
b.Drawing = gd;
StreamGeometryContext ctx = sg.Open();
foreach (double d in this.VerticalGrids)
{
ctx.BeginFigure(new Point(d, 0), true, false);
ctx.LineTo(new Point(d, this.RenderSize.Height), true,false);
}
foreach (double d in this.HorizontalGrids)
{
ctx.BeginFigure(new Point(0, d), true, false);
ctx.LineTo(new Point(this.RenderSize.Width, d),true, false);
}
ctx.Close();
sg.Freeze();
gd.Freeze();
b.Freeze();
this.Background = b;
}