基本上,我有一个有两个条件的ListView:
做任何一点都很容易,但我不能同时做到这两点。一个让解释更容易的例子:
<ListView ItemsSource="{Binding Items}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Focusable" Value="false"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsOnline}" Value="false">
<Setter Property="Background" Value="LightGray" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.Resources>
[... the rest ...]
</ListView>
如果我删除了ListView.ItemContainerStyle部分,则会正确绘制背景颜色。但是当Focusable设置为false时,将Background设置为LightGray无效。
有没有办法同时做两件事?
答案 0 :(得分:1)
使用当前代码,您可以有效地将样式设置两次,因此将忽略第二个样式声明。摆脱ItemContainerStyle并将Focusable属性移动到第二种样式,如下所示:
<ListView ItemsSource="{Binding Items}">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Focusable" Value="false"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsOnline}" Value="false">
<Setter Property="Background" Value="LightGray" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.Resources>
[... the rest ...]
</ListView>
答案 1 :(得分:0)
似乎你还需要一个触发器才能解决&#34;如果选择&#34;出现。这样的事情:
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}" Value="True">
<Setter Property="Background" Value="place a color you want">
</DataTrigger>
</Style.Triggers>
此外,您可能会发现此讨论也很有用:Change selection-color of WPF ListViewItem