我想为我的 Modern UI 应用程序设置自定义颜色。此颜色将用于 GridView\ListView 和其他地方的选择边框。
PS 我知道,我可以更改 GridViewItem 的样式,但我想在所有可以看到应用程序的地方看到这种颜色。
我想为我的 Modern UI 应用程序设置自定义颜色。此颜色将用于 GridView\ListView 和其他地方的选择边框。
PS 我知道,我可以更改 GridViewItem 的样式,但我想在所有可以看到应用程序的地方看到这种颜色。
啰嗦的办法就是把应用主题资源一一覆盖,得到你想要的颜色。我之前在Overriding Metro app resources中讨论过这个解决方案。
这非常耗时,并且需要处理很多变化。最好的方法是使用名为Hammer.Pants的开源工具,它是一个小命令行 exe,给定颜色将为您生成完整的应用程序资源。
您将需要重新设置使用选择颜色的所有控件的样式。
我决定覆盖画笔列表。可能是这段代码会帮助某人:
private List<string> ResourcesColors = new List<string>
{
"PageAccentBrush",
"ListViewItemSelectedBackgroundThemeBrush",
"ListViewItemSelectedPointerOverBackgroundThemeBrush",
"ListViewItemSelectedPointerOverBorderThemeBrush",
"ComboBoxItemSelectedBackgroundThemeBrush",
"ComboBoxItemSelectedPointerOverBackgroundThemeBrush",
"ComboBoxSelectedBackgroundThemeBrush",
"ComboBoxSelectedPointerOverBackgroundThemeBrush",
"ListBoxItemSelectedBackgroundThemeBrush",
"ListBoxItemSelectedPointerOverBackgroundThemeBrush",
"ProgressBarForegroundThemeBrush",
"ProgressBarIndeterminateForegroundThemeBrush",
"SliderTrackDecreaseBackgroundThemeBrush",
"SliderTrackDecreasePointerOverBackgroundThemeBrush",
"SliderTrackDecreasePressedBackgroundThemeBrush",
"ToggleSwitchCurtainBackgroundThemeBrush",
"ToggleSwitchCurtainPointerOverBackgroundThemeBrush",
"ToggleSwitchCurtainPressedBackgroundThemeBrush"
};
private void ApplyColorsToResources()
{
if (this.Resources.ContainsKey("PageAccentBrush"))
{
SolidColorBrush pageAccentBrush = this.Resources["PageAccentBrush"] as SolidColorBrush;
if (pageAccentBrush != null)
{
SolidColorBrush scb = null;
foreach (var item in this.ResourcesColors)
{
scb = (SolidColorBrush)Application.Current.Resources[item];
scb.Color = pageAccentBrush.Color;
}
}
}
}