将VisualChild添加到画布不起作用 - 不显示

时间:2012-03-26 19:58:47

标签: wpf wpf-controls add

我必须编写一个继承自Canvas的类,并且能够将Visuals添加到canvasbase中。

所以我写了这段代码:

class TestCanvas : Canvas
{
    VisualCollection visuals;

    public TestCanvas()
    {
        visuals = new VisualCollection(this);
    }

    protected override void OnMouseDown(MouseButtonEventArgs e)
    {
        Rectangle rect = new Rectangle
        {
            Width = 200,
            Height = 200,
            Stroke = Brushes.Red,
            StrokeThickness = 5,
            Fill = Brushes.Black
        };
        visuals.Add(rect);
        base.OnMouseDown(e);
    }

    protected override int VisualChildrenCount
    {
        get
        {
            return visuals.Count;
        }
    }

    protected override Visual GetVisualChild(int index)
    {
        if (index < 0 || index > visuals.Count)
            throw new ArgumentOutOfRangeException("index");

        return visuals[index];
    }
}

但是,如果我点击它并添加此矩形,则不会显示。 那么有人知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:2)

如果您想以编程方式将子项添加到派生的Canvas中,您可以这样做:

Rectangle rect = new Rectangle   
{   
    Width = 200,   
    Height = 200,   
    Stroke = Brushes.Red,   
    StrokeThickness = 5,   
    Fill = Brushes.Black   
};   

Canvas.SetLeft(rect, ...);
Canvas.SetTop(rect, ...);

Children.Add(rect);

无需转到可视图层并覆盖VisualChildrenCountGetVisualChild

如果由于任何其他原因您必须使用Visual,那么就不需要使用Canvas。您可能来自UIElementFrameworkElement