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

Posted

技术标签:

【中文标题】如何更改 UWP 中选定 ListView 项的突出显示颜色(Windows 10)【英文标题】:How to change Highlight color of the selected ListView item in UWP (Windows 10) 【发布时间】:2015-11-24 22:49:12 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

首先,在 Blend 中打开您的页面。然后右击你的ListView

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

给它起个名字然后点击OK

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

你应该看看这段代码-

<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

【讨论】:

谢谢!这正是我所需要的。【参考方案2】:

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

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

【讨论】:

如何获取可用键的列表。基本上我想在悬停/选择时更改 ListViewItem 的角半径【参考方案3】:

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

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

通过这种方式,您可以真正合乎逻辑地自定义您的项目。

【讨论】:

你在哪里设置这些?【参考方案4】:

延伸 bastecklein 的回答。您希望使用 App 而不是 Application 以使此方法在 UWP 项目中工作。您可以在加载初始框架时在 App.xaml.cs 中使用此代码,也可以只在要影响的页面后面的代码上设置资源颜色。

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

【讨论】:

如果我把它放在 App.xaml.cs 中,更改将反映在整个应用程序上? 不幸的是,是的。但是,一旦 UIElement 获得焦点,您就可以通过编程方式更改颜色。因此,如果您单击汉堡菜单按钮,请使用自定义颜色触发该代码。然后,如果您单击另一个想要具有不同颜色的元素,则再次触发代码。 在我的情况下,出于某种原因,只有这个“App.Current”版本有效。 “Application.Current”没有效果。谢谢大佬!

以上是关于如何更改 UWP 中选定 ListView 项的突出显示颜色(Windows 10)的主要内容,如果未能解决你的问题,请参考以下文章

XF UWP - MVVM - 如何在嵌套对象中绑定选取器选定项?

如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)

UWP,绑定listview中的多个数据

iOS 14,Swift UI 2 更改 NavigationLink 内选定列表项的背景颜色

Flutter Using ListView.Builder:如何在我选择的所有项目上仅更改一项的背景颜色

UWP - 有没有办法在退出 ListView 时更改鼠标光标而不在拖放期间触发事件?