2016-08-11 2 views
0

私は、同じ外観と機能を持つ複数のエクスパンダにスタイルを適用しようとしています。しかし問題は、私がExpander.Contentをスタイルすると、多くの人のうちの1人だけがコンテンツを持ち、残りはすべて空であるということです。Expander.Contentが1つにのみ適用されます

enter image description here

最小例:

<Style TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}"> 
    <Setter Property="Header"> 
     <Setter.Value> 
      Header 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <TextBlock Text="1"/> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!-- .... --> 

<Expander Grid.Row="0"/> 
<Expander Grid.Row="1"/> 
<Expander Grid.Row="2"/> 

だけ見るように、第2行は、設計時にコンテンツ(1)を有しています。実行時には、最後のエクスパンダだけが内容(1)を持ちます。

最初のエクスパンダをクリックすると、3番目のエクスパンダのコンテンツ(1)が実際に最初のエクスパンダに移動しました。

どうしてですか?それを修正する方法は?

答えて

1

スタイルは1つのインスタンスのみを作成します。ビジュアルエレメントは単一の親の子にしかなりません。 Contentの代わりにContentTemplateを直接設定してください。 (テンプレートは、テンプレートを使用してコントロールによって作成される内容を記述するだけなので、共有することができます)

+0

なぜヘッダーは3つのインスタンスを作成したのですか? – Steve

+0

@Steve:これは文字列 'Header"に設定されているため、*視覚的な要素*ではありません( 'TextBlock'と違って)。 –

+0

すべてのスタイルは1つのインスタンスのみを作成し、それが適用されるすべての要素にわたって共有します。スタイル内でビジュアルエレメントを使用したいが、エレメント間で異なるようにするには、テンプレートを使用します。私はそれを正しく理解しましたか? – Steve

関連する問題