我有一个非常简单的WPF ListBox,其SelectionMode设置为Multiple。
<ListBox SelectionMode="Multiple" />
当ListBox失去焦点时,由于选择颜色从蓝色变为浅灰色,因此很难确定选择了什么。更改此行为以使其保持蓝色的最简单方法是什么?
我知道这可能与ListItem的风格有关,但我找不到。
干杯。
答案 0 :(得分:49)
我在合并的ResourceDictionary中使用以下内容完成了类似的操作,它可能对您有所帮助:
<Style TargetType="ListBoxItem">
<Style.Resources>
<!--SelectedItem with focus-->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" Opacity=".4"/>
<!--SelectedItem without focus-->
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey }" Color="LightBlue" Opacity=".4"/>
</Style.Resources>
</Style>
答案 1 :(得分:11)
这不是问题的答案,但是当我在寻找一种方法来禁用列表框中的选择时,我发现了这一点。通过使用稍微修改过的Guy's&amp; amp; bendewey上面的技术,事实证明你可以在列表框中没有选择的外观,而不替换底层的项目控件或类似的东西。这是我使用的代码:
<Grid.Resources>
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="White" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="White" />
</Style.Resources>
</Style>
</Grid.Resources>
我还发现以下MSDN页面很有帮助:
MSDN: SystemColors Members (System.Windows)
谢谢你的帮助,伙计们。
答案 2 :(得分:7)
更完整的解决方案是让新画笔引用HighlightColor:
<Style TargetType="ListBox">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static Member=SystemColors.InactiveSelectionHighlightBrushKey}"
Color="{DynamicResource ResourceKey={x:Static Member=SystemColors.HighlightColorKey}}" />
</Style.Resources>
</Style>
</Setter.Value>
</Setter>
</Style>
这将确保它使用相同的颜色并匹配系统主题(即使系统主题在运行时更改,感谢DynamicResource)。
顺便说一下,似乎WPF的最新版本不再使用“ControlBrush”了,但更合适的是“InactiveSelectionHighlightBrush”。
答案 3 :(得分:4)
您可以通过重新编写模板来解决您的问题,但尝试使用此功能可以轻松修补。
<Style TargetType="ListViewItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Blue" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Blue" />
</Style.Resources>
</Style>
答案 4 :(得分:0)
我也有这个问题。但我通过使用IsSynchronizedWithCurrentItem =&#34; True&#34;
来解决这个问题。<ListBox
IsSynchronizedWithCurrentItem="True" />
答案 5 :(得分:0)
当您选择的项目变灰时,这是因为您的控件正在失去其逻辑焦点。多个控件可以同时具有逻辑焦点。因此,一个简单的解决方案是通过FocusManager为ListBox提供一个FocusScope。
<ListBox SelectionMode="Multiple" FocusManager.IsFocusScope="True"></ListBox>