当前位置:  开发笔记 > 编程语言 > 正文

绑定ElementName.它是使用Visual Tree还是Logical Tree

如何解决《绑定ElementName.它是使用VisualTree还是LogicalTree》经验,为你挑选了1个好方法。

{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.



1> micahtan..:

我认为这是合乎逻辑的树.使用ControlTemplates时,您将一个可视树替换为另一个,但我认为您不能引用ControlTemplate内部定义的名称.

例如:


    
        
            
                
                    
                
            
        
        
            
            
        
        
        
    

在ControlTemplate中找不到名为"border"的元素,但将labelBar绑定到"buttonFoo"的ElementName更改为背景绿色,如预期的那样.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有