私はいくつかのデータ バインディング エラーをスローしているプロジェクトを持っています。一例は次のとおりです。
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 またはコードで宣言されている) を判断する方法があるかどうかです。
私がこれまでに試したこと:
- レベルが o All に設定された System.Windows.Data 名前空間のデバッグ トレースを追加しました。これはこれ以上有用な情報を生成しませんでした
- Path が に設定されているすべてのバインディング式を見つけることを期待して、プロジェクト内でBindingという単語のテキスト検索を試みました
HorizontalContentAlignment
。1つだけ見つけて削除しましたが、それが欠陥のあるものではなかったことを示すメッセージがまだ表示されています..
このバインディングが宣言されている正確な場所について、WPF がより有用な情報を吐き出すようにする他のトリックを知っていますか?
アップデート
もう少し検索した後、これはスタイルがに適用されていることが原因であると確信していMenuItem
ます。ただし、問題のあるバインディングが宣言されている場所を特定することはまだできません..
更新 2
問題が見つかりました。ただし、問題を見つけることは、ほとんどの場合、エラー メッセージの限られた情報に基づいて暗闇で検索することであったため、疑問は残ります。
結局のところ、バインディングはスタイルで宣言されています。そして、スタイルは私のアプリケーションにはありません。おそらく のデフォルトのスタイルですMenuItem
。したがって、今のところ問題を解決するために、手動でHorizontalContentAlignment
on allを設定しましたMenuItems
。エラーの理由はMenuItem
、コードで生成される操作の順序に関係しています。それについては、別の新しい質問を投稿します。
したがって、今のところ、この話の教訓は、欠陥のあるバインディングがどこで宣言されているかを判断するためのより良いメカニズムが必要であると私が感じているということです。バインディングのスタック トレースのようなものを見たいのですが..
コードまたはマークアップでバインディングが宣言されている場所を特定する他のツールまたは方法を誰かが知っている場合に備えて、質問をもう少し開いておきます。
hereに適用されているスタイル/バインディングに関するMenuItems
別の質問を投稿しました。