我想使用数据绑定更改所选 ListBox项目的背景/高亮颜色。这就是我所拥有并尝试过的,但它不起作用。我不确定如何让资源部分拥有“当前项目”上下文。
颜色是显示的每个项目的属性(并且每个项目的值都不同)。
<ListBox x:Name="Categorie" ItemsSource="{Binding Categories}" IsSynchronizedWithCurrentItem="True">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding /Color}" />
</Style.Resources>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding /Color}" />
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" HorizontalAlignment="Center"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:2)
您可以使用Trigger
来实现:
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{Binding Color}" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
请注意,要使此绑定生效,必须在设置为Color
的数据项对象上具有名为ListBox.ItemsSource
的属性。
更新&gt;&gt;&gt;
好的,这是我的不好......我忘了SolidColorBrush
不是FrameworkElement
而是Freezable
,所以它们不能在Binding
中使用。 ..你有几个选择:
将您的颜色创建为StaticResource
个对象:
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource Color}" />
</Trigger>
或者您可以使用某种Background
将Color
属性绑定到Converter
对象:
<Style TargetType="ListBoxItem" Background="{Binding Color, Converter={StaticResource
SomeColourConverter}}" />
答案 1 :(得分:0)
另一种解决方法是使用color属性设置背景并将HightlightBrushKey设置为Transparent。