ListBoxItem样式 - 由未知实体覆盖

时间:2017-10-23 16:35:57

标签: c# wpf xaml

我正在处理一个ListBox的项目。

每个ListBoxItem都是:

  • 最喜欢的
  • 不是最喜欢的

此外,默认情况下,每个ListBoxItem也是:

  • 选择的
  • 徘徊在
  • 默认(未选中/悬停)

根据上述2x3状态给出的6种组合,我有几个不同的亮点。

每个ListBoxItem将根据匹配的条件单独突出显示。

由于每个ListBoxItem必须与DataTrigger州和Trigger州匹配,因此我使用MultiDataTrigger RelativeSource Binding设置为{RelativeSource Self},用于Trigger绑定。

我的ListBox显示如下:

<ListBox ItemsSource="{Binding Tracks}" SelectedItem="{Binding SelectedTrack}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding IsFavourite}" Value="True"/>
                        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="True"/>
                    </MultiDataTrigger.Conditions>

                    <Setter Property="Background" Value="#A3E4D7"/>
                    <Setter Property="BorderBrush" Value="#48C9B0"/>
                </MultiDataTrigger>

                <!-- More MultiDataTrigger conditions and setters here -->
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

最喜欢的每个项目都应该有绿色调。重音范围从非常轻(当喜欢和未选择时)到重(最喜欢和选择时)。

不喜欢的商品有蓝色调。

当项目是收藏​​并且未被选中时,我的绿色口音有效,但是一旦选择了某个项目,我的绿色口音就会消失,并且会出现默认的蓝色口音。

您可以看到发生此事件的屏幕截图here,其中加粗项目是收藏​​夹。选中的粗体项目不是绿色,即使我有一个MultiDataTrigger来指示它应该是,如上所示。

MouseHover DataTrigger出现同样的问题。它是默认的蓝色(不是我的蓝色)而不是绿色。

有谁知道为什么我的风格被覆盖或者什么覆盖它?

1 个答案:

答案 0 :(得分:1)

问题是当ListBoxItem处于选中状态时,ListBoxItem.Background不会被使用。

在Windows 10之前,默认的ListBoxItem控件模板有一个触发器,它将{DynamicResource {x:Static SystemColors.HighlightBrushKey}}应用到模板中某些子控件的后台,因此您可以在范围内define a new resource with that key

<ListBox.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#06658D" />

但Windows 10以不同的方式做到了。上述修复程序在Windows 10中失败。我在Win7上工作,并会在某人的Win10机器上进行几分钟的调查。

目前,您可以替换Template中的ItemContainerStyle。如果是我,我会在IsSelected上写一个触发器,将背景设置为{DynamicResource {x:Static SystemColors.HighlightBrushKey}},这样我就可以在应用程序级别使用该键定义画笔。