为什么这不起作用?
<ListBox>
<ListBox.Items>
<ListBoxItem>Foo</ListBoxItem>
<ListBoxItem>Bar</ListBoxItem>
<ListBoxItem>Text</ListBoxItem>
</ListBox.Items>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
即,Background
的{{1}}在选中时不会发生变化。
我希望在不必覆盖默认项目模板的情况下实现这种简单的行为。当然,这里有一个简单的解决方案,我只是没有看到。
更新
我在Windows 7和Windows 8中找到的唯一方法是覆盖默认的ListBoxItem
。由于我现在可以右键单击Visual Studio中的控件和编辑样式 - 编辑副本... ,但这样做有点不那么痛苦,但这感觉有些过分,因为我只是最终改变了我在下面评论了一行XAML。我只展示了我被迫介绍/覆盖的完整模板的一小部分相关部分。
有没有更简单的方法?
ItemContainerStyle
答案 0 :(得分:1)
尝试在ListBox.Resources
中添加此内容,然后移除IsSelected
触发器:
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
</ListBox.Resources>
在系统中有默认的高亮显示笔刷,具体取决于您的系统主题。要更改此值,必须转到SystemColors
。
引自MSDN
:
SystemColors类提供对系统画笔和颜色的访问,例如ControlBrush,ControlBrushKey和DesktopBrush。系统画笔是一个SolidColorBrush对象,它使用指定的系统颜色绘制区域。系统刷总是产生实心填充;它不能用于创建渐变。
您可以将系统画笔用作静态或动态资源。如果您希望刷子在应用程序运行时更改系统画笔时自动更新,请使用动态资源;否则,请使用静态资源。
在.NET 4.5
系统中不使用SystemColors
,因此,您应该:
创建您的Style/ControlTemplate
寻找替代方案,例如:List/Combo Box Background And Selected Colours Under .net 4.5
请参阅此link,其中显示了如何消除框架之间的差异