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

c# xaml listview uwp windows-10

14245 观看

4回复

324 作者的声誉

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

一般来说,我很难修改控件的默认主题,因为我找不到有用的文档。如果有人可以帮助我突出颜色并且还推荐我很好的文档,那将是很棒的。

作者: alecardv 的来源 发布者: 2015 年 8 月 30 日

回应 (4)


20

33678 作者的声誉

决定

实际上,发现样式属性的更好方法是使用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

作者: Justin XL 发布者: 31.08.2015 12:12

10

121 作者的声誉

如果您不想使用XAML,可以使用c#更简单地(在我看来)更改这些设置:

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

这样您就可以在逻辑上自定义项目。

作者: bastecklein 发布者: 19.11.2015 07:28

2

21 作者的声誉

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

App.Current.Resources["SystemControlHighlightListAccentLowBrush"] = new SolidColorBrush(Colors.Red);
App.Current.Resources["SystemControlHighlightListAccentMediumBrush"] = new SolidColorBrush(Colors.Red);
作者: Adam J Inks 发布者: 21.07.2016 05:48

0

1 作者的声誉

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

<ListView ...>
    <ListView.Resources>
        <SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="#FF0000" />
        <SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="#FF0000" />
    </ListView.Resources>
</ListView>
作者: Daniel Glick 发布者: 20.11.2018 06:11
32x32