如何更改 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>
我正在使用 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>