我正在开发WPF中的图形控件。我需要将Canvas
置于另一个之上。一个Canvas
包含网格线,另一个Canvas
在其上绘制对象。
这样做的原因是我需要从对象的画布中删除元素并重新绘制它,但需要保留网格线而不删除它们。
所以我从对象的画布中删除子项并不时地重绘它们。如果我在删除对象时使用相同的画布,则网格线也会消失。
有没有办法将一个画布放在另一个画布的上面?或者我的问题还有其他解决办法吗?
请帮忙。
的问候, rangana。
答案 0 :(得分:3)
有几种方法可以做到这一点。这是一个。只需扩展Canvas类并在OnRender方法中自己绘制网格。
public class GridCanvas : Canvas
{
public int rows = 4;
public int cols = 4;
protected override void OnRender(System.Windows.Media.DrawingContext dc)
{
double yStep = this.ActualHeight / rows;
double y = yStep;
for (int i = 0; i < rows - 1; i++)
{
dc.DrawLine(new Pen(Brushes.Black, 1), new Point(0, y), new Point(this.ActualWidth, y));
y += yStep;
}
double xStep = this.ActualWidth / cols;
double x = xStep;
for (int i = 0; i < cols - 1; i++)
{
dc.DrawLine(new Pen(Brushes.Black, 1), new Point(x, 0), new Point(x, this.ActualHeight));
x += xStep;
}
}
}