C# WPF RelativeSource找不到资源

C# WPF RelativeSource找不到资源,c#,wpf,relativesource,findancestor,C#,Wpf,Relativesource,Findancestor,我正在使用WPF创建一个自定义控件,我需要检索在用户控件代码中定义的属性,所以我使用了RelativeSource,但是我得到了这个错误 System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''. Bi

我正在使用WPF创建一个自定义控件,我需要检索在用户控件代码中定义的属性,所以我使用了RelativeSource,但是我得到了这个错误

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''. BindingExpression:Path=LeftColumnHeader; DataItem=null; target element is 'ExtDataGridComboBoxColumn' (HashCode=47761); target property is 'Header' (type 'Object')
我的XAML代码(嵌套树)是:

您知道如何检索我的属性以将其用作我的网格列的头函数吗? 非常感谢。
Andrea

您需要使用类的名称/类型,而不是要扩展的
UserControl
类。试试这个:

<WPFCtrlDg:ExtDataGridComboBoxColumn Header="{Binding Path=LeftColumnHeader, 
    RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type 
    UserRowView}}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="*"/>

使用

RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserRoleView}},
                Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
或者将其添加到用户控件:

<UserControl
    Name="myControl"
...
但实际上,我不太确定您是否仍然能够以这种方式绑定它,因为在绑定时,列标题有一些奇怪的规则。检查它:


@andrea不幸的是,我想你可以在第一个链接中找到答案,问题的底部包含一些答案。我在代码的某些部分使用了类似的方法,现在有点复杂了。我使用MVVM,如果我在与我的用户控件相关的Viewmodel中设置了这个属性,它就会工作,在本例中是codebehind(xaml.cs)中的属性,因为出于某种原因,我宁愿将它们留在那里。这样做将在viewmodel中搜索,而不是在codebehind@andrea做什么?因为我真的没有得到你的评论。我所理解的是,您成功地绑定了标题,但只有在您将Viewmodel中的属性设置为正确的情况下才这样做?@andrea没问题,很高兴我能提供帮助。
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserRoleView}},
                Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
<UserControl
    Name="myControl"
...
Header={Binding Path=LeftColumnHeader, ElementName=myControl}