Wpf 不带悬停和选定样式但具有交替listviewitem颜色样式的ListView
我尝试创建一个Wpf 不带悬停和选定样式但具有交替listviewitem颜色样式的ListView,wpf,xaml,listview,Wpf,Xaml,Listview,我尝试创建一个列表视图,它没有悬停和选定的样式,但为列表视图项提供了交替的颜色 要禁用样式,我设置了ItemContainerStyle。问题是表达式ListView.alternationandex总是以某种方式计算为0,正如Christian MosersWPF Inspector告诉我的那样。这将导致所有项目的背景色均为红色 <ListView ItemsSource="{Binding Configuration}" AlternationCount="2" > &l
列表视图
,它没有悬停和选定的样式,但为列表视图项
提供了交替的颜色
要禁用样式,我设置了ItemContainerStyle
。问题是表达式ListView.alternationandex
总是以某种方式计算为0
,正如Christian Mosers
WPF Inspector
告诉我的那样。这将导致所有项目的背景色均为红色
<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" >
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<Trigger Property="ListView.AlternationIndex" Value="0">
<Setter Property="Background" Value="Red" />
</Trigger>
<Trigger Property="ListView.AlternationIndex" Value="1">
<Setter Property="Background" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
触发器必须位于控制模板上;Border对其父级一无所知 但由于要设置的属性(背景)位于边界上,因此必须命名它并使用TargetName
<ListView AlternationCount="2" >
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border Name="border">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" TargetName="border" Value="Red" />
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" TargetName="border" Value="Blue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListViewItem Content="ABC"/>
<ListViewItem Content="DEF"/>
<ListViewItem Content="GHI"/>
<ListViewItem Content="JKL"/>
</ListView>
此XAML生成所需的结果:将触发器放入
:
您真的只想禁用选择样式,还是根本不需要选择功能?如果您只想显示一个动态的项目堆栈,您也可以恢复到项目控件
。@grek40我需要选择功能这个答案和我发布的答案有什么区别?为什么你取消删除了之前的答案,基本上是复制了我的…?我没有复制你的答案。我删除了我的,因为我没有正确地阅读问题。然后我继续使用VS测试另一个解决方案,它恰好与您的解决方案相同。这就是为什么,顺便说一下,我没有OP的绑定,也没有实际的测试数据。
<ListView AlternationCount="2" >
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border Name="border">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" TargetName="border" Value="Red" />
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" TargetName="border" Value="Blue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListViewItem Content="ABC"/>
<ListViewItem Content="DEF"/>
<ListViewItem Content="GHI"/>
<ListViewItem Content="JKL"/>
</ListView>
<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" >
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border x:Name="Border">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="Red" TargetName="Border" />
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="Blue" TargetName="Border" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>