为现代UI应用程序设置颜色

时间:2013-07-09 18:51:30

标签: windows-8 themes winrt-xaml modern-ui

我想为Modern UI应用程序设置自定义颜色。此颜色将用于GridView \ ListView和其他地方的选择边框。

P.S。我知道,我可以改变GridViewItem的样式,但我希望在所有地方看到这种颜色,可以看到它的应用。

3 个答案:

答案 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;
                }
            }
        }
    }