UWP/XAML:页面中的主题与#x27;是在单独的ResourceDictionary文件中还是在App.xaml中?
我有一个简单的UWP应用程序,只有一个页面。在尝试覆盖SystemAccentColor时(请参阅其他问题,如),我发现在添加代码的3个有效位置中的每个位置都会得到不同的结果:UWP/XAML:页面中的主题与#x27;是在单独的ResourceDictionary文件中还是在App.xaml中?,xaml,uwp,uwp-xaml,Xaml,Uwp,Uwp Xaml,我有一个简单的UWP应用程序,只有一个页面。在尝试覆盖SystemAccentColor时(请参阅其他问题,如),我发现在添加代码的3个有效位置中的每个位置都会得到不同的结果: 在页面本身的参考资料部分。(什么也不做) 在单独的ResourceDictionary文件中。(仅部分工作) 在App.xaml文件中。(工程) 这是一个页面。我的单个页面的参考资料以及Dictionary.xaml中包含的自定义样式: <Page.Resources> <ResourceDic
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
下面是我在3个位置中插入的SystemAccentColor代码,以下称为//代码//:
<Color x:Key="SystemAccentColor">Red</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>
//THE CODE//
</ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
//THE CODE//
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
//THE CODE//
</ResourceDictionary.ThemeDictionaries>
//代码//
指定这应该应用于灯光主题也不会起任何作用
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
//THE CODE//
</ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
//THE CODE//
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
//THE CODE//
</ResourceDictionary.ThemeDictionaries>
//代码//
字典资源
将//代码//插入Dictionary.xaml也不会起任何作用
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
//THE CODE//
</ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
//THE CODE//
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
//THE CODE//
</ResourceDictionary.ThemeDictionaries>
//代码//
但是,指定“亮/暗”主题会导致颜色覆盖应用,但仅适用于我的自定义样式,这些样式也在Dictionary.xaml中定义。但是,它仅适用于Windows亮/暗主题匹配的情况
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
//THE CODE//
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
//代码//
App.xaml
在App.xaml中插入//代码//就行了
<Application.Resources>
<ResourceDictionary>
//THE CODE//
</ResourceDictionary>
</Application.Resources>
//代码//
编辑:我还可以将暗/光主题指定为x:Key,一切正常
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
//THE CODE//
</ResourceDictionary.ThemeDiciontaries>
</ResourceDictionary>
</Application.Resources>
//代码//
收尾
总之,这到底是怎么回事?这显然是某种范围问题,但是,我在开发人员文档中找不到任何解释我在这里看到的行为的东西。很多工具不起作用的原因是
ResourceDictionary。主题词典
希望它的内容是资源词典,其中的键对应于各个项目。如果您将常规资源(如主题画笔)放入其中,则主题资源查找不知道该做什么,因此它不会拾取资源
如果在主题词典中指定资源,并加载包含该资源的词典,则资源词典将覆盖主题资源词典值,因此混合主题词典并在合并词典中加载资源词典通常是个坏主意
如果您仅在主题词典“light”中指定一个资源,则当apps/pages词典处于light主题中时,资源查找将获取该资源。但是,如果页面处于暗主题中,它将查找“暗”字典(在您的情况下,它丢失了该字典),然后向上搜索树,直到找到一个具有指定资源的暗主题字典。因此,要在所有主题中覆盖该资源,需要在所有主题字典(浅、暗和默认)中指定该资源