在 Windows 10 UWP 中更改强调色

25

我不想在我的应用程序中使用用户在Windows中选择的强调颜色,而是想显示自己的颜色。我可以通过创建新样式手动更改所有项目上的颜色,但通常控件中有许多地方需要更改,因此在应用程序级别上进行更改会更好。

我尝试设置<SolidColorBrush x:Key="SystemAccentColor" Color="#FFCB2128" /> ,但由于某种原因,它无法在某些项目上起作用,并将其他项目(如视频控件)变为灰色。


您需要在样式中设置目标类型,以便自动应用于目标类型中设置的类型。 - Brandon Seydel
@Adriano Repetti 那个答案只适用于Windows Phone(8/8.1),而不是Windows 10 UWP。因此,它实际上还没有得到回答。 - Kasper S Mathiesen
@AdrianoRepetti 很不幸,在UWP中它不起作用,我已经尝试过了。 :-( - Kasper S Mathiesen
它是有效的,只需在样式标签中设置目标类型并在内部设置属性设置器。 - Brandon Seydel
如果我理解正确的话,我仍然需要为每个控件设置自定义样式。 - Kasper S Mathiesen
显示剩余2条评论
5个回答

26
在Win10 UWP中,系统强调色被定义为ThemeResource SystemControlHighlightAccentBrush。您可以按照以下方式覆盖它。
<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Default">
        <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Orange" />
    </ResourceDictionary>
    <ResourceDictionary x:Key="Dark">
        <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Green" />
    </ResourceDictionary>
    <ResourceDictionary x:Key="Light">
        <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Blue" />
    </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

我按照你的方法进行了更改,它可以工作,但是我的ExtendedSplashScreen仍然保持白色作为它的强调颜色... 有什么想法吗? - yalematta
3
这段代码应该放在哪里?主清单文件?app.xaml文件?页面xaml文件中? - vcapra1
"SystemControlHighlightAccentBrush"!这就是我想要的。谢谢! - dex3703
2
@vcapra1 把它塞进 app.xaml。 - Billy Jake O'Connor

25

要更改每个系统控件的强调颜色,您需要重新定义系统资源,如下所示。

请注意,SystemAccentColor 是一种颜色,而不是刷子。如果您不重新定义所有其他刷子,颜色将不会应用于所有内容。

<ResourceDictionary.ThemeDictionaries>
  <ResourceDictionary x:Key="Default">     
    <Color x:Key="SystemAccentColor">#FF20A060</Color>  <!--Your accent color-->

    <SolidColorBrush x:Key="SystemControlBackgroundAccentBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="SystemControlDisabledAccentBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="SystemControlForegroundAccentBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="SystemControlHighlightAltAccentBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="SystemControlHighlightAltListAccentHighBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.9" />
    <SolidColorBrush x:Key="SystemControlHighlightAltListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.6" />
    <SolidColorBrush x:Key="SystemControlHighlightAltListAccentMediumBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.8" />
    <SolidColorBrush x:Key="SystemControlHighlightListAccentHighBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.9" />
    <SolidColorBrush x:Key="SystemControlHighlightListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.6" />
    <SolidColorBrush x:Key="SystemControlHighlightListAccentMediumBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.8" />
    <SolidColorBrush x:Key="SystemControlHyperlinkTextBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="ContentDialogBorderThemeBrush" Color="{ThemeResource SystemAccentColor}" />
    <SolidColorBrush x:Key="JumpListDefaultEnabledBackground" Color="{ThemeResource SystemAccentColor}" />
  </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

5
只提供SystemAccentColor就足够了,其余将会相应地应用...也许自最近的更新以来是这样的? - David Medenjak
1
我不确定您所指的最后更新是什么,但我已安装了最新的Windows版本和VS2015 Update 1 RC,并安装了更新版本的UWP工具包。如果我只定义SystemAccentColor,则某些控件将使用它,但某些控件仍然保持原始颜色。 - Tom Shane
3
抱歉,我不能这样做。但是我刚刚在https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlUIBasics中的Application - Application.Resources - ResourceDictionary添加了 <Color x:Key="SystemAccentColor">#00FF00</Color>,并且一切都变成了绿色,就像描述的那样。 也许你只是为一个主题设置了颜色,而它在其他地方被覆盖了?或者它确实取决于某个版本。 - David Medenjak
3
没问题,我只是以为你有一个测试项目。无论如何,我已经找到了问题所在。我的应用程序中的区别在于我重新定义了一些控件的模板。我不操作画笔,只是修改适用于该类型所有控件的原始模板。在这种情况下,我必须完善所有画笔。如果我不定义新模板,只需要“SystemAccentColor”就足够了 - 就像你说的那样。感谢你帮我找出这个问题! - Tom Shane
3
它们只是原始控件的复制品,几乎没有变化。它们的资源完全没有改变,因此它们都在使用ThemeResource。自从我开始使用UWP以来,我一直遇到这样的奇怪问题。真是一团糟。 - Tom Shane
显示剩余5条评论

5
如果您不使用任何模板或ResourceDictionary,请将以下内容添加到App.xaml中:
<ResourceDictionary>
    <Color x:Key="SystemAccentColor">#FFCB2128</Color>
</ResourceDictionary>

如果您正在使用Minimal Template10模板,则请在Styles/Custom.xaml文件中CustomColor和ContrastColor值之后添加以下行:
<Color x:Key="SystemAccentColor">#FFCB2128</Color>

如果您有自己的ResourceDictionary,链接自App.xaml,则同样在那里添加“Color”行。

1
对我有用的是设置。
 <SolidColorBrush x:Key="SystemAccentColor" Color="#FFCB2128" />
    <Color x:Key="SystemAltHighColor">#FFCB2128</Color>
    <Color x:Key="SystemAltLowColor">#FFCB2128</Color>
    <Color x:Key="SystemAltMediumColor">#FFCB2128</Color>
    <Color x:Key="SystemAltMediumHighColor">#FFCB2128</Color>
    <Color x:Key="SystemAltMediumLowColor">#FFCB2128</Color>
    <Color x:Key="SystemBaseHighColor">#FFCB2128</Color>
    <Color x:Key="SystemBaseLowColor">#FFCB2128</Color>
    <Color x:Key="SystemBaseMediumColor">#FFCB2128</Color>
    <Color x:Key="SystemBaseMediumHighColor">#FFCB2128</Color>
    <Color x:Key="SystemBaseMediumLowColor">#FFCB2128</Color>

在app.xaml文件中,为了覆盖Windows设置的内容。

0

对于想要使用C#进行编程的人,以下是方法:

在App.cs文件中,在OnLaunched方法中添加以下代码:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    //Use Argb values
    Application.Current.Resources["SystemAccentColor"] = Color.FromArgb(100, 100, 100, 100);

    //Use predefined colors
    Application.Current.Resources["SystemAccentColor"] = Colors.Black;

    //Rest of the code
    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接