我正在尝试像这样进行绑定(bind)
<local:TempUserControl>
<local:TempUserControl.Foo>
<local:Foo Name2="{Binding Path=Name, RelativeSource={RelativeSource AncestorType={x:Type local:TempUserControl}}}"/>
</local:TempUserControl.Foo>
</local:TempUserControl>
出现错误
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='WpfApplication1.TempUserControl', AncestorLevel='1''. BindingExpression:Path=Name; DataItem=null; target element is 'Foo' (Name=''); target property is 'Name2' (type 'String')
请问有什么问题吗?
最佳答案
为此,Foo
对象需要是 TempUserControl
的逻辑子对象。 FrameworkElement
(和 FrameworkContentElement
)为此提供了两种方法:AddLogicalChild
和 RemoveLogicalChild
。
因此,在 TempUserControl
中,为 Foo
依赖属性注册一个属性更改回调。然后,该回调可以将旧值和新值传递给实例方法,实例方法使用旧值调用 RemoveLogicalChild
并使用新值调用 AddLogicalChild
。请注意,Foo
必须继承自 FrameworkElement
或 FrameworkContentElement
,否则它不会包含在逻辑树中。
关于c# - 在属性节点中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465642/