2011-02-27 14 views
4

なしのResourceDictionary内部のDataTemplateを定義する私は、このフォームのコードサンプルWPFを何度も見てきました:WPF - キー

<Window.Resources> 
    <DataTemplate DataType="{x:Type SomeType}"> 
     <!-- Elements defining the DataTemplate--> 
    </DataTemplate> 
</Window.Resources> 

私は使用法を理解しますが、この構文はOKです、なぜ私が理解カント:ResourceDictionaryの実装しているのでしたがって、Resourceプロパティに追加するすべての要素でキーを指定する必要があります。今私はDictionaryKeyPropertyAttributeを使用して、クラスが暗黙のキー値を提供できることを知っていますが、DataTemplateクラスの場合、提供されるプロパティは "DataTemplateKey"です。私はちょっと軽いと思っていますが、この質問の動機は、私がdidnしても他のクラスを使用する方法を知ることです。誰でも?あなたはあなたの質問で述べたように

答えて

3

x:Key属性を持たないエントリは、キーとしてDataTemplateKey(SomeType)を使用しています。リソース内の特定のSomeTypeに対して、そのようなインスタンスを1つだけ指定できます。 DataTemplateKeyは、ResourceKeyから派生したTemplateKeyから派生したものです。もちろん、そのようなDataTemplateリソース定義は、それぞれの型のDataTemplateKeyが一意であるため、一意にとどまる多くの型に対して使用できます。例えば

、次のリソース定義を考えてみます。

<Window.Resources> 
    <!-- Generic Button data template --> 
    <DataTemplate DataType="{x:Type Button}"> 
     <!-- Elements defining the DataTemplate--> 
    </DataTemplate> 
    <!-- Generic TextBlock data template --> 
    <DataTemplate DataType="{x:Type TextBlock}"> 
     <!-- Elements defining the DataTemplate--> 
    </DataTemplate> 
    <!-- Specific Button data template --> 
    <DataTemplate x:Key="SpecialButton" DataType="{x:Type Button}"> 
     <!-- Elements defining the DataTemplate--> 
    </DataTemplate> 
    </Window.Resources> 

これは、リソースディクショナリに3つのエントリになります。画像内のオレンジ矢印、下、SpecialButtonキー付きリソースの赤い矢印ポイントながら特定のButtonTextBlockタイプのDataTemplateKey基づいてエントリをポイントし、(キー付き)エントリ:

enter image description here

+0

マイケル。あなたの詳細な答えをありがとう、私はまだ問題があります - 私はあなたが言及したDataTemplateKey型に(オブジェクト型の)DataTypeプロパティがどのように関係しているか理解できませんでした。私は私の混乱が、私は「DataTemplateKey」に関連しているのDataTemplateクラスをラップドキュメント、DictionaryKeyPropertyAttributeから理解で...両方の「DataTemplateKey」タイプと型オブジェクトの「DataTemplateKey」プロパティ名があるという事実に基づいていると思いますオブジェクト型のプロパティです。その点を明確にしてください。再度、感謝します。 –

関連する問題