2016-08-11 101 views
0

我想將樣式應用於多個擴展器,它們將具有相似的外觀和功能。但問題是,如果我的風格Expander.Content只有一個會有內容,其餘都是空的。Expander.Content只適用於一個

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"/> 

,你只看到第二排在設計時(1)內容。在運行期間,只有最後一個擴展器有內容(1)。

如果我點擊第一個擴展器,第三個擴展器的內容(1)實際上移動到第一個擴展器。

這是怎麼發生的?以及如何解決它?

回答

1

樣式只創建一個實例,對於可視元素只能是單個父級的子元素。直接設置ContentTemplate而不是Content(模板只是描述了控件使用它創建的內容,因此它可以共享。)

+0

爲什麼Header創建3個實例,但只有一個用於內容? – Steve

+0

@Steve:因爲你將它設置爲字符串「Header」,它不是*可視元素*(不同於「TextBlock」)。 –

+0

所以所有樣式都只創建一個實例,並將其應用於所有元素。如果我想在樣式中使用可視元素,但希望它們在元素之間不同,請使用模板。我的理解是否正確 – Steve