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

时间:2009-03-30 20:08:24

标签: .net wpf listbox

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

<ListBox SelectionMode="Multiple" />

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

我知道这可能与ListItem的风格有关,但我找不到。

干杯。

类似: WPF ListView Inactive Selection Color

6 个答案:

答案 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>