我正在尝试像这样绑定
<local:TempUserControl>
<local:TempUserControl.Foo>
<local:Foo Name2="{Binding Path=Name, RelativeSource={RelativeSource AncestorType={x:Type local:TempUserControl}}}"/>
</local:TempUserControl.Foo>
</local:TempUserControl>
并得到错误
找不到参考'RelativeSource的绑定源
FindAncestor,AncestorType ='WpfApplication1.TempUserControl',
AncestorLevel ='1''。 BindingExpression:Path =名称; DataItem = null;目标
元素为'Foo'(Name ='');目标属性为“ Name2”(类型为“字符串”)
任何想法请问出了什么问题?
最佳答案
为此,该Foo
对象必须是TempUserControl
的逻辑子级。 FrameworkElement
(和FrameworkContentElement
)为此提供了两种方法:AddLogicalChild
和RemoveLogicalChild
。
因此,在TempUserControl
中,为Foo
依赖项属性注册属性更改的回调。然后,该回调可以将旧值和新值传递给实例方法,该方法用旧值调用RemoveLogicalChild
并用新值调用AddLogicalChild
。请注意,Foo
必须从FrameworkElement
或FrameworkContentElement
继承,否则它将不包含在逻辑树中。