Following an example from 'Pro WPF in C# 2008' by Matthew Macdonald, I have implemented a custom version of a
Canvas
(relevant code shown below).
The
AddVisual()
and
RemoveVisual()
methods have no effect on the values I print out from the base
Canvas
class, and so I am wondering what collections are modified by
Canvas.AddVisualChild()
,
Canvas.AddLogicalChild()
,
Canvas.RemoveVisualChild()
and
Canvas.RemoveLogicalChild()
.
The main point of why I am asking is that I want to be able to 'reset' my custom canvas - i.e. I want to remove all
Visual
instances from it and start from scratch. I can call
_visuals.Clear()
to clear my custom list but what do I need to do in the base class?
Any help would be appreciated.
public class MyCanvas : Canvas
{
public void AddVisual( Visual visual )
{
_visuals.Add( visual );
base.AddVisualChild( visual );
base.AddLogicalChild( visual );
Console.WriteLine( $"_visuals.Count={_visuals.Count}" );
Console.WriteLine( $"base.Children.Count={base.Children.Count}" );
Console.WriteLine( $"base.VisualChildrenCount={base.VisualChildrenCount}" );
}
public void RemoveVisual( Visual visual )
{
_visuals.Remove( visual );
base.RemoveVisualChild( visual );
base.RemoveLogicalChild( visual );
Console.WriteLine( $"_visuals.Count={_visuals.Count}" );
Console.WriteLine( $"base.Children.Count={base.Children.Count}" );
Console.WriteLine( $"base.VisualChildrenCount={base.VisualChildrenCount}" );
}
public void ClearAll()
{
_visuals.Clear();
}
protected override int VisualChildrenCount { get { return _visuals.Count; } }
protected override Visual GetVisualChild( int index ) { return _visuals[ index ]; }
private List<Visual> _visuals = new List<Visual>();
}
What I have tried:
I have tried searching articles on AddLogicalChild() and AddVisualChild(), but nowhere can I get an explanation of what collections these functions manipulate and how to 'reset' them.