c# - 在属性节点中绑定(bind)

标签 c# wpf xaml

我正在尝试像这样进行绑定(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)为此提供了两种方法:AddLogicalChildRemoveLogicalChild

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

关于c# - 在属性节点中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465642/

相关文章:

c# - NotImplementedException——但它是永远不应该被调用的东西

wpf - XAML - 如何在 StackPanel 中将控件彼此对齐

wpf - 如何将 DataRow 绑定(bind)到 TextBlock?

c# - 在特定工作表上打开 Excel 文件

c# - 将数据导出到 excel 时应用程序停止

c# - 如何通知对象实例之外的属性?

c# - 无法限制 slider 值的小数点 + 一次在 ToggleButtons 上设置 IsChecked

c# - 打开 PathListBoxScrollBehavior WPF

c# - C#中的并行树遍历

c# - Win32异常 : Operation completed successfully