UWP app中的ColorPaletteResources API-如何通过代码(不仅限于Xaml)在App资源中通过自己的颜色设置ColorPaletteResources?

我正在开发针对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函数之前。 知道这一点,如何获得应用程序颜色的实时信息?

ygdbl 回答:UWP app中的ColorPaletteResources API-如何通过代码(不仅限于Xaml)在App资源中通过自己的颜色设置ColorPaletteResources?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3168947.html

大家都在问