我有一个非常简单的 WPF ListBox,其 SelectionMode 设置为 Multiple。
<ListBox SelectionMode="Multiple" />
当列表框失去焦点时,很难判断选择了什么,因为选择颜色从蓝色变为浅灰色。改变这种行为使其保持蓝色的最简单方法是什么?
我知道这可能与 ListItem 的样式有关,但我找不到在哪里。
干杯。
我在合并的 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>
这不是问题的答案,但当我寻找一种禁用列表框中的选择的方法时,我发现了这一点。通过使用上面盖伊和本杜威技术的稍微修改形式,事实证明,您可以在列表框中显示没有选择的外观,而无需替换底层项目控件或类似的东西。这是我使用的代码:
<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 成员 (System.Windows)
谢谢大家的帮助。
更完整的解决方案是让新画笔参考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”。
您可能可以通过重写模板来解决您的问题,但尝试这个简单的补丁。
<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>
当您选择的项目变灰时,这是因为您的控件失去了逻辑焦点。多个控件能够同时获得逻辑焦点。因此,一个简单的解决方案可能是通过 FocusManager 为您的 ListBox 提供 FocusScope。
<ListBox SelectionMode="Multiple" FocusManager.IsFocusScope="True"></ListBox>
我也有这个问题。但我通过使用 IsSynchronizedWithCurrentItem="True" 解决了这个问题:
<ListBox
IsSynchronizedWithCurrentItem="True" />
我尝试了多个示例中的样式资源建议,但是没有解决我的问题:列表框所选项目在从对话框窗口返回屏幕时呈灰色突出显示 - 逻辑焦点是上面“Sachar”提到的问题。 我通过设置 [listboxname].SelectedIndex = -1; 解决了这个问题作为打开对话框窗口的按钮单击的最后一行代码。不再有灰色背景项目。