我的问题是Windows 10商店应用程序中的ThemeResources特有的。不幸的是,“经典” WPF中可用的几项内容不同或在此处不可用。

我要为很多ui元素实现的目标是:

  • 允许用户使用系统的强调色(在XAML中,这将是{ThemeResource SystemAccentColor}作为值。)
  • 允许用户改用自定义/固定颜色。 (我可以覆盖resourcedictionary中的SystemAccentColor键)
  • 允许在运行时在系统强调和自定义颜色之间切换(我可以绑定(bind)颜色而不是使用资源)

  • 但是我还没有找到一个好的解决方案来实现所有这些目标。如果我有自己的带有自定义颜色的资源字典,那么当用户希望切换回系统的强调颜色时,就不会放弃它。
    使用我要绑定(bind)的属性的缺点是,我无法意识到用户在应用程序运行时是否在系统设置中更改了强调色-使用{ThemeResource}标记即可。

    有任何想法如何正确完成此工作吗?
    如果可以从代码中设置ThemeResource,我可以为此编写一些行为,但似乎不可用。

    最佳答案

    在Windows 10中,名称“Accent Color”更改为“SystemControlHighlightAccentBrush”,这是一个ThemeResource

    使用它的例子

    <TextBlock Foreground="{ThemeResource SystemControlHighlightAccentBrush}"
                       Text="This is a sample text" />
    

    要覆盖它,只需在App.xaml中更改它的值
    <Application.Resources>
        <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Orange" />
    </Application.Resources>
    

    要切换,会有点困难
    首先,您需要为App.xaml中的每个主题设置所有颜色
    <Application.Resources>
        <ResourceDictionary>
            <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>
        </ResourceDictionary>
    </Application.Resources>
    

    然后,在页面或后面的代码中,设置相应的主题
    <TextBlock x:Name="TestTextBlock"
                   Foreground="{ThemeResource SystemControlHighlightAccentBrush}"
                   RequestedTheme="Dark"
                   Text="This is a sample text" />
    

    或在C#中
    TestTextBlock.RequestedTheme = ElementTheme.Dark;
    

    关于xaml - 在代码中设置或修改ThemeResource,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33356217/

    10-13 23:40