有了{Binding ElementName=foo}
,它会查找视觉树还是逻辑树?
逻辑树何时重要?
在查找名称时,例如在 {Binding ElementName=Foo} 中,搜索会沿着祖先查找名称范围,就像它对可继承属性所做的那样。
通过附加行为在 Silverlight 中绑定 ElementName
为了实现这一点,WPF 提供了 ElementName 和 RelativeSource 绑定,为您提供了一种强大的机制来定位可视树中的其他元素以绑定到
编辑:
它看起来像用于绑定的逻辑树ElementName
。
论据#1。
根据 MSDN 文章FrameworkElement 类:
FrameworkElement 扩展了 UIElement 并添加了以下功能:
- 对数据绑定和动态资源引用的支持:对数据绑定和资源的属性级支持由 DependencyProperty 类实现并体现在属性系统中,但能够解析存储为表达式的成员值(编程构造作为数据绑定和动态资源的基础)由 FrameworkElement 实现。有关详细信息,请参阅数据绑定概述和资源概述。
论点#2。
ElementName
指向x:Name
,所以应该如何找到这个名称。有一个NameScope概念。
对于大多数情况,在 FrameworkElement 和 FrameworkContentElement 上公开的 FindName 方法是更适合调用以按名称搜索元素的方法。FrameworkElement 和 FrameworkContentElement 公开的 Name 属性更适合用于将初始名称设置为标记属性。并且在 FrameworkElement 和 FrameworkContentElement 上公开的 RegisterName 方法对于在特定名称范围内建立名称是必要的(没有 NameScope 成员可以直接执行此操作;您必须先设置当前名称范围才能使用 RegisterName)。
另一方面,Visual 类既没有FindName
方法,也没有实现INameScope。