How does ElementName Binding work? - Part 1 Logical Tree & NameScope
How does ElementName Binding work – Part 2 BindingExpression
How does ElementName Binding work – Part 3 InheritanceContext
Weird behavior of DataContext Inheritance
当NameScope不工作的时候,往往是因为不在同一个Scope内,比如
这时x:Name="tbxNothing"定义
发生在主页内(使用MyWrapperPanel的地方),这是一个外部的NameScope,但是却不会把这个TextBox直接加到自己的逻辑树里,Xaml的定义只是设置了一个UserControl的一个属性。
而在
MyWrapperPanel控件内部,是使用者自己(一个UserControl)的NameScope,它接受外面设置的一个Dependency Property的时候,并不会自动加到自己的NameScope里,也不会更新父亲的NameScope。但是我觉得,这个过程其实由于修改了ContentPresenter的内容,其实可以推导出逻辑树的变化,应该要更改双方的NameScope里的集合才对。
下面这篇和这篇也是同样的问题。结果只能靠手动设置NameScope和Register,尤其是如果在外面的animation用了里面的对象,还必须把外面的NameScope传进去,这样才是同一个NameScope。不够这三篇文章的情况是可以理解的,因为涉及了Template,顾名思义,一个模版可以有多个实体共同使用,而且有可能这些实体共享一个父亲对象(在逻辑树中),所以为了保证命名不重复,不会自动传递NameScope是可以理解的。