更改一个ListViews样式也影响其他ListViews

时间:2017-04-18 16:35:51

标签: c# wpf xaml listview controltemplate

我有一个WPF ControlTemplate包含一个ListView(让我们称之为原始ListView')和另一个自定义WPF控件,它有自己的控件模板包含一个ListView(让我们称之为' Custom ListView& #39;)

我正在更改原始ListViews样式:

<Style TargetType="{x:Type ListView}" BasedOn="{StaticResource ListViewStyle}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyClass}}, Path=MyVariable}" Value="0">
        <Setter Property="ListView.ItemsPanel" Value="{StaticResource itemsPanelTemplate1}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyClass}}, Path=MyVariable}" Value="1">
        <Setter Property="ListView.ItemsPanel" Value="{StaticResource itemsPanelTemplate2}" />
        </DataTrigger>
    </Style.Triggers>
</Style> 

<ListView x:Name="My_ListView"  ItemsSource="{Binding}" ItemContainerStyle="{DynamicResource MyListViewItemStyle}"/>

我所看到的是,当我通过更改MyVariable更改原始ListView的样式时,自定义ListViews样式也会更改。

如何避免这种情况,以便样式更改只影响我想要的ListView?

1 个答案:

答案 0 :(得分:2)

由于您的Style没有x:Key属性,因此它适用于范围内的所有ListBox元素。这称为隐式数据模板。

如果您只想将Style应用于单个ListView,则应Style x:Key

<Style x:Key="myStyle" TargetType="{x:Type ListView}" BasedOn="{StaticResource ListViewStyle}">

...并使用Style设置要应用样式的ListView的{​​{1}}属性:

StaticResource