代码之家  ›  专栏  ›  技术社区  ›  Ray

将选定和未聚焦的列表框样式更改为不灰显

  •  31
  • Ray  · 技术社区  · 16 年前

    我有一个非常简单的wpf列表框,selectionmode设置为multiple。

    <ListBox SelectionMode="Multiple" />
    

    当列表框失去焦点时,很难判断选择了什么,因为选择颜色从蓝色变为浅灰色。改变这种行为使其保持蓝色最简单的方法是什么?

    我知道这可能与列表项的样式有关,但我找不到在哪里。

    干杯。

    相似的: WPF ListView Inactive Selection Color

    6 回复  |  直到 7 年前
        1
  •  49
  •   citykid    8 年前

    我在合并的资源字典中使用了以下方法,可以帮助您:

    <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>
    
        2
  •  11
  •   Eben Geer    15 年前

    这不是问题的答案,但我在查找禁用列表框中选择的方法时发现了这一点。通过使用上面稍微修改过的guy's&bendwey的技术形式,您可以在不替换基础项控件或类似控件的情况下在列表框中显示无选择。这是我使用的代码:

    <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)

    谢谢你的帮助,伙计们。

        3
  •  7
  •   nmclean    11 年前

    一个更完整的解决方案是让新的画笔引用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”。

        4
  •  4
  •   bendewey    16 年前

    您可以通过重新编写模板来解决您的问题,但请尝试使用此方法轻松修补。

    <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>
    
        5
  •  0
  •   ncfuncion    11 年前

    我也有这个问题。但我通过使用isSynchronizedWithCurrentItem=“true”解决了这个问题:

    <ListBox 
    IsSynchronizedWithCurrentItem="True" />
    
        6
  •  0
  •   Sachar    7 年前

    当选定的项变灰时,这是因为控件失去了其逻辑焦点。多个控件可以同时具有逻辑焦点。因此,一个简单的解决方案是通过FocusManager给列表框一个FocusScope。

    <ListBox SelectionMode="Multiple" FocusManager.IsFocusScope="True"></ListBox>