10

こんにちは、WPF のプロの皆さん。

DataContext は FrameworkElement (すべての WPF コントロールの基本クラス) のプロパティであり、DependencyProperty として実装されます。つまり、論理ツリー内のすべての子孫要素が同じ DataContext を共有します。

ContentControl は、その子孫要素でそれを行う必要がありますか?

そうではないシナリオがあり、その不正行為の原因は何ですか?!

それについてもう少し理解するには、問題が始まるこのスレッドを読んでください(ここにすべてをコピーしたくない)...:

WPF: トリガー ターゲット 'cc' が見つかりません。ターゲットは、すべてのセッター、トリガーの前に出現する必要があります

つまり、ContentControl 内の私の DataTemplates には、バインドするものが何もないことを意味するデッド DataContext があります。実際には不可能なことです...

ContentControl の下のすべての要素は、DataContext プロパティに何も設定されていませんか???

4

4 に答える 4

23

DataContext は FrameworkElement (すべての WPF コントロールの基本クラス) のプロパティであり、DependencyProperty として実装されます。つまり、論理ツリー内のすべての子孫要素が同じ DataContext を共有します。

それが依存関係プロパティであるという事実は、継承を意味するものではありません... には当てはまりますDataContextが、依存関係プロパティのFrameworkPropertyMetadataOptions.Inheritsメタデータにフラグがあるためです。

ContentControl は、その子孫要素でそれを行う必要がありますか?

ContentControlは少し特殊です。DataContextその子孫 ( から構築されたビジュアル ツリーDataTemplate) は、実際にはContentContentControlです。したがって、ContentControlコンテンツがない場合、そのDataContext内部は null です。

于 2010-12-18T22:25:45.910 に答える
15

これは私のために働いた:

<ContentControl ContentTemplate="{StaticResource NotesTemplate}"
                Content="{Binding}"
                DataContext="{Binding HeightField}"/>

がなければContent="{Binding}"、DataContext は NULL でした

于 2012-10-09T19:24:39.387 に答える