【问题标题】:Changing one ListViews style affects other ListViews also更改一种 ListViews 样式也会影响其他 ListViews
【发布时间】:2017-04-18 16:35:51
【问题描述】:

我有一个 WPF ControlTemplate,其中包含一个 ListView(我们称之为“原始 ListView”)和另一个自定义 WPF 控件,它有自己的包含 ListView 的控件模板(我们称之为“自定义 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?

【问题讨论】:

  • 您的样式在哪里定义以及如何设置“原始” ListView 的样式?
  • 我上面复制的样式是在包含“原始 ListView.我通过更改 MyVariable 来设置样式,DataTriggers 应用 itemsPanelTemplate1 或 itemsPanelTemplate2。

标签: c# wpf xaml listview controltemplate


【解决方案1】:

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

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

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

...并使用StaticResource 设置要应用样式的ListViewStyle 属性:

<ListView x:Name="original" Style="{StaticResource myStyle}" ... />

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2011-07-30
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多