我想为Modern UI应用程序设置自定义颜色。此颜色将用于GridView \ ListView和其他地方的选择边框。
P.S。我知道,我可以改变GridViewItem的样式,但我希望在所有地方看到这种颜色,可以看到它的应用。
答案 0 :(得分:1)
漫长的方式是逐个覆盖应用程序主题资源以获得所需的颜色。我在Overriding Metro app resources之前已经讨论过这个解决方案。
这很费时间,并且有很多变化要处理。最好的方法是使用一个名为Hammer.Pants的开源工具,它是一个小命令行exe,给定一种颜色可以为你生成全部的应用程序资源。
答案 1 :(得分:0)
您需要重新设置使用选择颜色的所有控件。
答案 2 :(得分:0)
我决定覆盖画笔列表。可能这段代码会帮助某人:
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;
}
}
}
}