我必须编写一个继承自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];
}
}
但是,如果我点击它并添加此矩形,则不会显示。 那么有人知道为什么这不起作用吗?
答案 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);
无需转到可视图层并覆盖VisualChildrenCount
和GetVisualChild
。
如果由于任何其他原因您必须使用Visual,那么就不需要使用Canvas。您可能来自UIElement
或FrameworkElement
。