2012-01-25 7 views
0

なぜこの仕事しません:私はControlTemplateに切り替えるとスタイル内にデータテンプレートを設定できないのですが、コントロールテンプレート内に入れることができますか?

<Style TargetType="s:Substance"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{TemplateBinding Name}"/> 
        <TextBox Text="{TemplateBinding Count}"/> 
       </StackPanel> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

それは動作しますが、私はデータテンプレートを必要としています。また、TemplateDataTemplateに置き換えた場合、そのプロパティは認識されません。誰が何が起こっているか知っていますか?ありがとうございました。

注:物質はFrameworkElementから派生します。それはコントロールではありません。

+0

「物質」とは何ですか? – NestorArturo

+0

@NestorArturo物質がFrameworkElementから派生した質問を更新しました。 – mihajlv

答えて

3

Templateは、ControlTemplateを予期しています。このプロパティは、データそのものではなく、コントロール自体のテンプレートを設定します。

Substanceコントロールには、DataTemplateが必要なプロパティがありますか?例えばContentTemplateContentControlの場合)またはItemTemplateItemsControlの場合)?

編集:あなたはおそらくこれをしたい:

<Some.Resources> 
    <DataTemplate DataType="{x:Type s:Substance}"> <!-- The use of x:Type is important! --> 
     <StackPanel> 
      <TextBlock Text="{Binding Name}"/> 
      <TextBox Text="{Binding Count}"/> 
     </StackPanel> 
    </DataTemplate> 
</Some.Resources> 

Substance用のDataTemplateを定義します。コンテンツまたはアイテムとしてSubstanceが追加されると、そのデータテンプレートは自動的に適用されます。

+0

SubstanceはFrameworkElementから派生します。私がしたいのは、テキストボックスの後に名前のような特定の外観を持つためにComboListに配置するときです。代わりにアイテムテンプレートを設定する必要がありますか?アイテムテンプレートを使用すると、テンプレートはアイテムを必要とするコントロールに追加すると表示されます。言い換えれば、スタックパネルに追加すると表示されません。 – mihajlv

+0

@mihajlv:コントロールはそれほど反応的ではありません。通常は、コントロールの使用場所に応じて特定の方法で動作するコントロールを定義しません。通常、 'DataTemplate'をそのデータ型に(キーを設定せずにそれをリソースに追加することによって)関連付けるか、' Content'または 'ItemTemplate'を使ってどのように表示するかをデータを含むコントロールに指示します。プロパティ。 –

+0

@mihajlv: 'FrameworkElement'はテンプレートデータを扱っていませんが、あなたはこのコントロールが何を達成するのかよく分かりません。 –

関連する問題