2

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

2 回答 2

2

您可以使用 aTrigger来实现:

<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.

更新>>>

好的,那是我的错......我忘记了SolidColorBrush不是 aFrameworkElement和 is Freezable,所以它们不能用于 a 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}}" />
于 2013-08-27T09:51:11.217 回答
0

另一种解决方法是使用您的颜色属性设置背景并将 HightlightBrushKey 设置为透明。

于 2013-08-27T11:00:51.350 回答