1

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

PS 我知道,我可以更改 GridViewItem 的样式,但我想在所有可以看到应用程序的地方看到这种颜色。

4

3 回答 3

1

啰嗦的办法就是把应用主题资源一一覆盖,得到你想要的颜色。我之前在Overriding Metro app resources中讨论过这个解决方案。

这非常耗时,并且需要处理很多变化。最好的方法是使用名为Hammer.Pants的开源工具,它是一个小命令行 exe,给定颜色将为您生成完整的应用程序资源。

于 2013-07-09T22:02:24.233 回答
0

您将需要重新设置使用选择颜色的所有控件的样式。

于 2013-07-09T20:42:36.233 回答
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;
                }
            }
        }
    }
于 2013-07-25T12:24:54.213 回答