我有一个项目抛出一些数据绑定错误。一个例子是:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
我的问题是是否有办法确定此绑定的实际声明位置(在 XAML 或代码中声明)。
到目前为止我已经尝试过:
- 为 System.Windows.Data 命名空间添加了一个调试跟踪,级别设置为全部;这没有产生任何更有用的信息
- 尝试在项目中对单词Binding进行文本搜索,希望找到所有将 Path 设置为的绑定表达式
HorizontalContentAlignment
;我只找到了一个并将其删除,但我仍然收到消息,这似乎表明那不是错误的..
您是否知道任何其他技巧可以使 WPF 吐出一些更有用的信息,说明此绑定的确切声明位置?
更新
经过多一点搜索后,我很确定这是由于某种样式应用于MenuItem
. 但是,我仍然无法确定声明错误绑定的位置。
更新 2
我发现了问题。但是问题仍然存在,因为发现问题主要是根据错误消息中的有限信息在黑暗中搜索的问题。
事实证明,绑定是在样式中声明的。而且样式不在我的应用程序中。这可能是MenuItem
. 所以现在要解决这个问题,我只是手动设置了HorizontalContentAlignment
on all MenuItems
。错误的原因在某种程度上与操作顺序有关,因为这MenuItem
是在代码中生成的。我将单独发布一个新问题。
所以,就目前而言,这个故事的寓意是,我觉得需要一个更好的机制来确定错误绑定的声明位置。我想看到类似绑定堆栈跟踪的东西..
如果有人知道确定在代码或标记中声明绑定的位置的任何其他工具或方法,我将把这个问题保持一段时间。
我发布了另一个关于应用于MenuItems
here的样式/绑定的问题。