你的位置:首页 > 软件开发 > ASP.net > WPF的重要新概念

WPF的重要新概念

发布时间:2016-03-16 09:00:14
出处:http://www.cnblogs.com/free722/archive/2011/11/12/2238654.html逻辑树与可视树  XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性。在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树。  WP ...

出处:http://www.cnblogs.com/free722/archive/2011/11/12/2238654.html

逻辑树与可视树

  XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性。在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树。

  WPF用户界面的逻辑树也并不一定用XAML创建,它完全可能用过程式代码来实现。

  逻辑树的概念很直观,但为什么要关注它呢?因为几乎WPF的每一方面(属性、资源、事件等)都有与逻辑树相关联的行为。如,属性值有时会沿着树自动传递给子元素,而触发的事件可以自底向上或自顶向下遍历树。

  与逻辑树类似的一个概念是可视树。可视树基本上是逻辑树的扩展,在可视树中,节点都被打散,分放到核心可视组件中。可视树提供了一些详细的可视化实现,而不是把每个元素当作一个“黑盒”。如,虽然ListBox从逻辑上讲是一个单独的控件,但它的默认可视呈现是由更多的原始WPF元素组成的:一个Border对象、两个ScrollBar及其他一些元素。

  并非所有的逻辑树节点都会出现在可视树中,只有从System.Windows.Media.Visual或System.Windows.Media.Visual3D派生的元素才会被包含进去。其他元素不会包含在内,因为它们自己并没有与生俱来的呈现行为。

  使用System.Windows.LogicTreeHelper和System.Windows.Media.VisualTreeHelper这两个有些对象的类可以方便地遍历逻辑树和可视树。

  注意:不要根据具体的可视树写代码。逻辑树是静态的,不会受到程序员的干扰(例如动态添加/删除)元素,但只要用户切换不同的Windows主题,可视树就会改变。

  遍历和打印逻辑树和可视树的示例代码:

WPF的重要新概念public parital class AboutDialog : Window void PrintLogicalTree(int depth, object obj) //有时,叶子节点不是DependencyObject,如get='_blank'>string //递归调用每个逻辑子节点 void PrintVisualTree(int depth, DependencyObject obj)
public class Button : ButtonBase  static Button()  //.NET属性包装器(可选)  //属性改变的回调(可选)
void Button_MouseEnter(object sender, MouseEventArgs e)void Mouse_MouseLeave(object sender, MouseEventArgs e)
<Button MinWidth="75" Margin="10">
public class Button : ButtonBase  static Button()  //.NET事件包装器(可选)  protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)

原标题:WPF的重要新概念

关键词:wpf

wpf
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。