控件模板
理解逻辑树和可视化树
添加的元素分类称为逻辑树。
可视化树是逻辑树的扩展版本。它将元素分成更小的部分。换句话说,它并不查看被精神封装到一起的黑色方框,如按钮,而是查看按钮的可视化元素——使按钮具有引用北京特性的边框(由ButtonChrome类表示)、内部的容器(ContentPresenter对象)以及存储按钮文本的块(由大家熟悉的TextBlock表示
可采用多种方法将一颗逻辑树扩展成一颗可视化树,认识到这一点是很重要的,使用的样式和设置的属性等级细节。例如,在前面的示例中,按钮包含了文本内容,因此会自动创建嵌套的TextBlock元素。
通过可视化树可以完成一下两项非常有用的工作:
– 可使用样式改变可视化树中的元素。可使用Style.TargetType属性选择希望修改的特定元素。甚至当空间属性发生变化时,可使用触发器自动完成更改。不过,某些特定的细节很难甚至无法修改。
– 可为空间创建新的模板,对于这种情况,控件模板将被用于按期望的方式构建可视化树。
WPF提供了用于浏览逻辑树和可视化的两个雷:System.Windows。LogicalTreeHelper和System.Windows.Media.VisualTreeHelper
LogicalTreeHelper类的方法:
名称 | 说明 |
---|---|
FindLogicalNode() | 根据名称查找特定元素,从指定的元素开始并向下查找逻辑树 |
BringIntoView() | 如果元素在可滚动的容器内,并且当前不可见,就将元素混动到视图中。FrameworkElement.BringIntoView()方法执行相同的工作 |
GetParent() | 获取指定元素的父元素 |
GetChildren() | 获取指定元素的子元素 |
除了专门用来执行低级绘图操作的一些方法外(例如,可用于明政策是和边界检查的方法),ViwualTreeHelper类提供的方法和LogicalTreeHelper类提供的方法类似。
VisualTreeHelper类还提供了一种研究应用程序中可视化树的又去方法。使用GetChild()方法,可以遍历任意窗口的可视化树, 并且为了进行分析可以将他们显示出来。这是一个非常好的学习工具,只需要使用一些递归的代码就可以实现。