2016-08-11 114 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