我正在处理一个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
出现同样的问题。它是默认的蓝色(不是我的蓝色)而不是绿色。
有谁知道为什么我的风格被覆盖或者什么覆盖它?
答案 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}}
,这样我就可以在应用程序级别使用该键定义画笔。