WPF中的逻辑树通过VisualTreeHelp 帮助类我们可以遍历出一个逻辑树下面的所有元数
public void GetChild(DependencyObject dp, VisualTreeSchema vt)
{
int count = VisualTreeHelper.GetChildrenCount(dp);
for (int i = 0; i < count; i++)
{
FrameworkElement element = (FrameworkElement)VisualTreeHelper.GetChild(dp, i);
VisualTreeSchema node = new VisualTreeSchema() { Name = element.GetType().Name, frame = element };
vt.Nodes.Add(node);
GetChild(element, node);
}
}
public class VisualTreeSchema : INotifyPropertyChanged
{
public FrameworkElement frame { get; set; }
public VisualTreeSchema()
{
Nodes = new List<VisualTreeSchema>();
}
public List<VisualTreeSchema> Nodes { get; set; }
public string Name { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}