在WPF中将画布放在另一个画布的顶部?

时间:2009-11-06 04:35:29

标签: wpf layout canvas

我正在开发WPF中的图形控件。我需要将Canvas置于另一个之上。一个Canvas 包含网格线,另一个Canvas在其上绘制对象。

这样做的原因是我需要从对象的画布中删除元素并重新绘制它,但需要保留网格线而不删除它们。

所以我从对象的画布中删除子项并不时地重绘它们。如果我在删除对象时使用相同的画布,则网格线也会消失。

有没有办法将一个画布放在另一个画布的上面?或者我的问题还有其他解决办法吗?

请帮忙。

的问候, rangana。

1 个答案:

答案 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;
        }
    }
}