将选定且未聚焦的列表框样式更改为不变为灰色

Ray*_*Ray 31 .net wpf listbox

我有一个非常简单的WPF ListBox,SelectionMode设置为Multiple.

<ListBox SelectionMode="Multiple" />
Run Code Online (Sandbox Code Playgroud)

当ListBox失去焦点时,由于选择颜色从蓝色变为浅灰色,因此很难确定选择了什么.更改此行为以使其保持蓝色的最简单方法是什么?

我知道这可能与ListItem的风格有关,但我无法找到它.

干杯.

类似: WPF ListView非活动选择颜色

Guy*_*uck 50

我在合并的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>
Run Code Online (Sandbox Code Playgroud)

  • 使用InactiveSelectionHighlightBrushKey而不是.NET 4.5中的ControlBrushKey. (18认同)
  • 这似乎不适用于在默认的`ControlTemplate`触发器中使用静态颜色的Windows-8.您必须派生基础`Style`并在这些触发器中指定过度使用的画笔或直接给出颜色.http://stackoverflow.com/questions/16819577/setting-background-color-or-wpf-4-0-listbox/16820062#16820062 (6认同)

Ebe*_*eer 11

这不是问题的答案,但是当我在寻找一种方法来禁用列表框中的选择时,我发现了这一点.通过使用稍微修改过的Guy's&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>
Run Code Online (Sandbox Code Playgroud)

我还发现以下MSDN页面有用:

MSDN:SystemColors成员(System.Windows)

谢谢你的帮助,伙计们.


nmc*_*ean 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>
Run Code Online (Sandbox Code Playgroud)

这将确保它使用相同的颜色并匹配系统主题(即使系统主题在运行时更改,感谢DynamicResource).

顺便说一句,似乎WPF的最新版本不再使用"ControlBrush"了,但更合适的是"InactiveSelectionHighlightBrush".

  • 这似乎不适用于 Windows 10,您能否验证这是否仍然有效? (2认同)