WPF中的逻辑树
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术: Visual Studio 2015 * SQL Server
作者:
撰写时间:2019年06月27日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在WPF中,通过为支持UI元素的对象设置属性,可以下行这些UI元素添加内容。例如:你将项添加到ListBox通过操作控制其Items属性。通过执行此操作,你将项放入ItemCollection,它是Items属性值。同样,可以将对象添加到DockPanel,则操作其Children属性值。在这里,会将对象添加到UIEmentCollection。有关代码如下:
逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成。最显著的特点就是由布局控件、或者其他常用的控件组成
<Grid>
<DockPanel>
<Button DockPanel.Dock="Top" Click="Button_Click" Content="获取逻辑树和可视树"></Button>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0">
<TextBlock DockPanel.Dock="Top" Text="逻辑树"></TextBlock>
<TreeView Name="tvLogicTree"></TreeView>
</DockPanel>
</Grid>
</DockPanel>
</Grid>
static string GetTypeDescription(object obj)
{
return obj.GetType().FullName;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.tvLogicTree.Items.Add(GetLogicTree(this));
//this.tvVisualTree.Items.Add(GetVisualTree(this));
}
// 获取逻辑树
public static TreeViewItem GetLogicTree(DependencyObject obj)
{
if (obj==null)
{
return null;
}
//创建逻辑树的节点
TreeViewItem treeItem = new TreeViewItem { Header = GetTypeDescription(obj), IsEnabled = true };
//循环遍历,获取逻辑树的所有子节点
foreach (var child in LogicalTreeHelper.GetChildren(obj))
{
//递归调用
var item = GetLogicTree(child as DependencyObject);
if (item != null)
{
treeItem.Items.Add(item);
}
}
return treeItem;
}
从上面的代码中可以看出,Grid、DockPanel、Button、Grid等其实就是XAML界面的逻辑树。