当有大量图形需要绘制的时候,WPF推荐的是采用DrawingVisual结合DrawingCanvas进行绘制。
WPF中给出的DrawingCanvas代码如下,它从Canvas继承,并改写了VisualChildrenCount只读属性、GetVisualChild方法、AddVisual、DeleteVisual和ClearVisuals方法。然而,该代码不能显示Button之类的元素。
public class DrawingCanvas:Canvas
{
private List<Visual> visuals = new List<Visual>();
protected override int VisualChildrenCount
{
get
{ return visuals.Count; }
}
protected override Visual GetVisualChild(int index)
{
return visuals[index];
}
public void AddVisual(Visual visual)
{
visuals.Add(visual);
base.AddVisualChild(visual);
base.AddLogicalChild(visual);
}
public void DeleteVisual(Visual visual)
{
visuals.Remove(visual);
base.RemoveVisualChild(visual);
base.RemoveLogicalChild