我有一个 ListBox,其中项目的背景颜色绑定到条目的某些属性:
<ListBox ItemsSource="{Binding ObservableCollectionOfFoos}" >
<ListBox.ItemContainerStyle >
<Style TargetType="ListBoxItem" >
<Setter Property="Content" Value="{Binding SomePropertyOfFoo}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding AnotherPropertyOfFoo}" Value="true">
<Setter Property="Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
这可行,但是当我将鼠标悬停或选择一个项目时,背景会更改(可能并不奇怪)为默认的鼠标悬停/选定颜色。
我是 WPF 的新手,我不确定我是否会正确地做这种事情,我想也许我需要使用ItemContainerStyleSelector
,但我对如何使用它感到困惑,而且似乎很愚蠢为这个小东西创建一个类...
我还认为是创建一个从布尔值到颜色的 IValueConverter,然后绑定它而不必使用 DataTrigger 作为不同的方法,那会更优雅吗?这对我有什么帮助吗?
编辑
如果我可以根据 将所选项目的背景颜色更改为不同的颜色AnotherPropertyOfFoo
,那也很好,如果问的不是太多的话
编辑 2(评论@Sheridan 答案的扩展):
这不起作用
<ListBox>
<ListBox.Items>
<ListBoxItem>one</ListBoxItem>
<ListBoxItem>two</ListBoxItem>
<ListBoxItem>three</ListBoxItem>
<ListBoxItem>four</ListBoxItem>
</ListBox.Items>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Background" Value="Green" />
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
</Style.Resources>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>