-1

ControlControl は DataContextChanged をリッスンしてから設定する必要があると常に思っていましthis.Content = this.DataContextたが、ContentControl のソース コードを反映することができ、Content が設定される場所が見つかりません。

Content のように ContentControl を設定せずに Template 内に ContentControl を持つことについて話しているContent = {TemplateBinding prop}

ContentControl が正確にどのように機能するかを知っている人はいますか? Content は内部でどのように設定されますか?

今のところ、ContentControl について私が知っているのはゴミのようです。

何か案は?

よろしくお願いします。

4

2 に答える 2

3

@nit の発言に加えて、 a の内容にはContentControl内部自己接続がありません。Content代わりに、プロパティが親コントロールのプロパティにバインドされたデータである他のコントロール内で使用されることが一般的です...これにより、自動的に動作するように見える場合があります。

<ControlTemplate x:Key="DataGridCellWrapTemplate" TargetType="{x:Type DataGridCell}">
    <Border Name="DataGridCellBorder">
        <ContentControl Content="{TemplateBinding Content}" />
    </Border>
</ControlTemplate>

この場合、ContentControl.Contentプロパティは内部的にプロパティにデータ バインドされDataGridCell.Contentます。これは、 の として設定されているものは何でもContentDataGridCellこの に表示されることを意味しますContentControl

は「データの保持者」と考えることができますが、ContentControlこれは必ずしもデータ バインドされたデータではありません。DataTemplateコレクション コントロール内のデータ オブジェクトがどのように見えるべきかを定義するために を作成することに (ほとんどの場合) 慣れています。ContentControlコレクションに for each アイテムがあるようなものと考えることができます。

これに続いて、 aを使用DataTemplateして各コレクション アイテムがどのように見えるかを定義できる場合、1 を使用して a 内の単一のアイテムContentControlがどのように見えるかを定義することもできます。

<ContentControl Content="{Binding SomeDataObject}" 
    ContentTemplate="{StaticResource SomeDataTemplateToDefineWhatTheDataLooksLike}" />

もちろん、プロパティDataTemplateを設定せずに関連する型のa を宣言した場合はx:Key、プロパティの設定を省略できContentTemplateます。したがってContentControl、 は、同じ を使用してコレクションから 1 つのアイテムを表示するのに便利ですDataTempate

あなたのコメントに対処するには、それはStylea が使用する「制限されたデフォルト」が原因ですContentControl。詳細については、MSDN のContentControl クラスページを参照することをお勧めします...そのページから:

ContentControl には、限定された既定のスタイルがあります。コントロールの外観を向上させたい場合は、新しい DataTemplate を作成できます。

于 2013-09-20T10:12:17.537 に答える