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