更改一个 ListViews 样式也会影响其他 ListViews
Changing one ListViews style affects other ListViews also
我有一个包含 ListView 的 WPF ControlTemplate(我们称之为 'Original ListView')和另一个自定义 WPF 控件,它有自己的包含 ListView 的控件模板(我们称之为 'Custom ListView')。
我正在像这样更改原始 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?
由于您的 Style
没有 x:Key
属性,它适用于范围内的所有 ListBox
元素。这称为隐式数据模板化。
如果您只想将 Style
应用于单个 ListView
,您应该给 Style
一个 x:Key
:
<Style x:Key="myStyle" TargetType="{x:Type ListView}" BasedOn="{StaticResource ListViewStyle}">
...并使用 StaticResource
:
设置要应用样式的 ListView
的 Style
属性
<ListView x:Name="original" Style="{StaticResource myStyle}" ... />
我有一个包含 ListView 的 WPF ControlTemplate(我们称之为 'Original ListView')和另一个自定义 WPF 控件,它有自己的包含 ListView 的控件模板(我们称之为 'Custom ListView')。
我正在像这样更改原始 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?
由于您的 Style
没有 x:Key
属性,它适用于范围内的所有 ListBox
元素。这称为隐式数据模板化。
如果您只想将 Style
应用于单个 ListView
,您应该给 Style
一个 x:Key
:
<Style x:Key="myStyle" TargetType="{x:Type ListView}" BasedOn="{StaticResource ListViewStyle}">
...并使用 StaticResource
:
ListView
的 Style
属性
<ListView x:Name="original" Style="{StaticResource myStyle}" ... />