我正在开发针对Win 10 1809及更高版本的应用程序。
我注意到,从1809年开始,就有一个名为ColorPaletteResources
的新API(这是一个从ResourceDictionary
继承的类),可以在App.Xaml资源中轻松设置该API以自定义应用的配色方案,甚至是强调颜色本身。
现在,如果我像microsoft Docs所说的那样使用它,即在XAML中...
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:microsoft.UI.Xaml.Controls" />
<!-- Other merged dictionaries here -->
<ColorPaletteResources accent="Yellow" AltHigh="BlueViolet" AltLow="Coral" AltMedium="DarkKhaki" AltMediumHigh="Aqua" AltMediumLow="DarkGreen" BaseHigh="Red" BaseLow="Gainsboro">
</ColorPaletteResources>
</ResourceDictionary.MergedDictionaries>
<!-- Other app resources here -->
</ResourceDictionary>
</Application.Resources>
...它的工作原理非常好,而且非常帅(尽管在某些控件中,某些视觉状态颜色仍然看起来不是自定义的:某些指针式笔刷仍带有系统强调的颜色...希望他们会解决此问题),并且您甚至可以为每个应用主题指定一个调色板。 另一个优点是,所有这些调色板都不会与“高对比度”主题交互,因此,在“设置”中设置自己的颜色时,该应用将具有用户期望的确切行为。
问题是,在运行时在代码中设置此ColorPaletteResources
似乎不起作用。
我真的在寻找一种在运行时轻松更改所有应用程序颜色的简单方法,我想终于找到了……但是当我在MainPage.xaml.cs中编写此代码时……>
ColorPaletteResources palette = new ColorPaletteResources();
palette.accent = Colors.Red;
App.Current.Resources.MergedDictionaries.Add(palette);
...什么都没发生。
您的问题:
1)我在代码中定义ColorPaletteResources
时做错了吗?
2)是否有更好的方法来更改accent和所有主要应用程序的颜色(带有“ SystemControl [...] Brush”的颜色),而不必重新定义控件中的所有模板和样式?
感谢您的关注和耐心。
最诚挚的问候
编辑:关于在XAML中使用此新API,我尝试了设置了所有颜色字段的Palette。我只是复制了之前的一段代码,所以某些指针笔刷仍然带有系统强调颜色的问题是真实的。
编辑2:我发现通过代码在应用程序资源中设置ColorPaletteResources
在App.OnLaunched函数中有效,并且通常在每个页面中的InitializeComponent函数之前。
知道这一点,如何获得应用程序颜色的实时信息?