转载:How does ElementName Binding work

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内,比如

http://stackoverflow.com/questions/6355217/xname-not-working-if-element-wrapped-in-usercontrols-content-silverlight

这时x:Name="tbxNothing"定义发生在主页内(使用MyWrapperPanel的地方),这是一个外部的NameScope,但是却不会把这个TextBox直接加到自己的逻辑树里,Xaml的定义只是设置了一个UserControl的一个属性。而在MyWrapperPanel控件内部,是使用者自己(一个UserControl)的NameScope,它接受外面设置的一个Dependency Property的时候,并不会自动加到自己的NameScope里,也不会更新父亲的NameScope。但是我觉得,这个过程其实由于修改了ContentPresenter的内容,其实可以推导出逻辑树的变化,应该要更改双方的NameScope里的集合才对。

下面这篇这篇也是同样的问题。结果只能靠手动设置NameScope和Register,尤其是如果在外面的animation用了里面的对象,还必须把外面的NameScope传进去,这样才是同一个NameScope。不够这三篇文章的情况是可以理解的,因为涉及了Template,顾名思义,一个模版可以有多个实体共同使用,而且有可能这些实体共享一个父亲对象(在逻辑树中),所以为了保证命名不重复,不会自动传递NameScope是可以理解的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值