如何更改 UWP 中所选 ListView 项目的突出显示颜色 (Windows 10)

How to change Highlight color of the selected ListView item in UWP (Windows 10)

我正在使用 C# 和 XAML 开发 Windows 10 应用程序。 我有一个 ListView,我想更改所选项目的默认 HighLight 颜色。我看到了很多代码示例(例如 this),但它们都是为 WP8 或 Win8 设计的,我试图实现它们,但它们对我不起作用。

总的来说,我在修改控件的默认主题时遇到了麻烦,因为我找不到有用的文档。 如果有人能帮我处理高亮颜色并推荐我好的文档就太好了。

实际上发现样式属性的更好方法是使用 Blend。

首先,在 Blend 中打开您的页面。然后右键单击您的 ListView 并转到

编辑其他模板 > 编辑生成的项目容器 (ItemContainerStyle) > 编辑副本.

为其命名并点击 确定

现在,您已经为 ListViewItem 生成了完整的内置样式,您可以在此处找到有关其外观、动画和其他视觉行为的所有信息。

你应该看看这段代码-

<ListViewItemPresenter CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                       ContentMargin="{TemplateBinding Padding}" 
                       CheckMode="Inline" 
                       ContentTransitions="{TemplateBinding ContentTransitions}" 
                       CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                       DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}" 
                       DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" 
                       DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}" 
                       DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}" 
                       FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}" 
                       FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}" 
                       HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                       PointerOverForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                       PressedBackground="{ThemeResource SystemControlHighlightListMediumBrush}"
                       PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}"
                       PointerOverBackground="{ThemeResource SystemControlHighlightListLowBrush}"
                       ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}" 
                       SelectedPressedBackground="{ThemeResource SystemControlHighlightListAccentHighBrush}"
                       SelectionCheckMarkVisualEnabled="True" 
                       SelectedForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                       SelectedPointerOverBackground="{ThemeResource SystemControlHighlightListAccentMediumBrush}" 
                       SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}"
                       VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />

看到第 SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}" 行了吗?这就是您可以为其应用自己的颜色的地方。请记住,它应该是 Brush 类型而不是 Color.

如果您不想使用 XAML,这里有一个更简单的方法(在我看来)来更改这些设置,使用 c#:

Application.Current.Resources["SystemControlHighlightListAccentLowBrush"] = new SolidColorBrush(Colors.Red);
Application.Current.Resources["SystemControlHighlightListAccentMediumBrush"] = new SolidColorBrush(Colors.Red);

这样您就可以真正有逻辑地自定义您的项目。

扩展 bastecklein 的回答。您想使用 App 而不是 Application 来使此方法在 UWP 项目中工作。您可以在加载初始框架时在 App.xaml.cs 中使用此代码,或者您可以在要影响的页面后面的代码中设置资源颜色。

App.Current.Resources["SystemControlHighlightListAccentLowBrush"] = new SolidColorBrush(Colors.Red);
App.Current.Resources["SystemControlHighlightListAccentMediumBrush"] = new SolidColorBrush(Colors.Red);

这可以在 XAML 中通过覆盖资源来实现。

<ListView ...>
    <ListView.Resources>
        <SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="#FF0000" />
        <SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="#FF0000" />
    </ListView.Resources>
</ListView>