根据数据更改所选ListBox项目的背景/高亮颜色

时间:2013-08-27 09:36:15

标签: wpf xaml data-binding

我想使用数据绑定更改所选 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>

2 个答案:

答案 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>

或者您可以使用某种BackgroundColor属性绑定到Converter对象:

<Style TargetType="ListBoxItem" Background="{Binding Color, Converter={StaticResource 
SomeColourConverter}}" />

答案 1 :(得分:0)

另一种解决方法是使用color属性设置背景并将HightlightBrushKey设置为Transparent。