我正在尝试像这样绑定

<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)为此提供了两种方法:AddLogicalChildRemoveLogicalChild

因此,在TempUserControl中,为Foo依赖项属性注册属性更改的回调。然后,该回调可以将旧值和新值传递给实例方法,该方法用旧值调用RemoveLogicalChild并用新值调用AddLogicalChild。请注意,Foo必须从FrameworkElementFrameworkContentElement继承,否则它将不包含在逻辑树中。

10-08 14:08