Xaml 覆盖主题笔刷Windows 10 UWP

Xaml 覆盖主题笔刷Windows 10 UWP,xaml,windows-phone,win-universal-app,windows-10,Xaml,Windows Phone,Win Universal App,Windows 10,我正在尝试覆盖Windows10中的一些样式颜色,但无法使其正常工作 我的app.xaml如下所示: <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Resources.xaml"/> </ResourceDictionary.MergedDictiona

我正在尝试覆盖Windows10中的一些样式颜色,但无法使其正常工作

我的app.xaml如下所示:

        <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Default" Source="Theme.xaml"/>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>

我的Theme.xaml是这样的

<ResourceDictionary
x:Key="Default"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<SolidColorBrush x:Key="ListBoxBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxFocusBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxItemPressedBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxItemSelectedForegroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ListBoxItemSelectedBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="FocusVisualBlackStrokeThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ScrollBarButtonForegroundThemeBrush" Color="Red" />
<SolidColorBrush x:Key="ScrollBarPanningBackgroundThemeBrush" Color="Red" />
<SolidColorBrush x:Key="ButtonPressedBackgroundThemeBrush" Color="White"/>

<SolidColorBrush x:Key="SearchBoxHitHighlightSelectedForegroundThemeBrush" Color="Red"/>
<SolidColorBrush x:Key="SearchBoxHitHighlightForegroundThemeBrush" Color="Pink"/>


但是它不起作用,它不会覆盖任何地方的样式。

您正在设置的样式适用于Windows 8应用程序。通用Windows应用程序使用的样式大大简化

找到它们最简单的方法是将列表框添加到页面中,在设计器中右键单击它,然后选择编辑模板。。。创建模板的副本并查看使用的名称

所有控件现在都尽可能使用相同的笔刷,而不是使用特定于控件的笔刷

例如,列表框的前景、背景和边框笔刷使用以下笔刷:

  • SystemControlForegroundBaseHighBrush系统控制
  • SystemControlBackgroundChromeMediumLowBrush系统控制背景
  • SystemControlForegroundBaseHighBrush系统控制

为了补充Rob的答案,对于那些寻求更广泛的应用程序响应的人来说,它帮助我找到了完整的默认主题,这些主题在 Windows SDK安装的
\(程序文件)\Windows工具包\10\DesignTime\CommonConfiguration\Neutral\UAP\\Generic文件夹,位于meresources.xaml中

这是一个用于默认、高对比度和灯光的ResourceDictionary。default键处理UWP中的暗主题,因为当找不到默认的“暗”ResourceDictionary时,它将被默认为暗主题

默认主题和灯光主题有近1000种控件特定颜色,或更通用的“SystemControlForeground…”颜色,如Rob所示,但在UWP中,它们主要基于以下25种颜色类别:

  • SystemAccentColor
    ,一种操作系统范围内的用户定义颜色,UWP文档在Design&UI>Style>color下有一整页介绍该颜色
    • 上面有6个较亮和较暗的色调(
      SystemAccentColorLight1
      …Dark1
      ,等等),但它们不在默认资源字典中使用。然而,该颜色的.6、.8和.9不透明度被使用了几次,这是唯一一次使用不透明度
然后是Windows 8.1中留下的300多种颜色类别,它们可以手动选择一种特定的颜色,您可以看到该颜色的范围

唯一的例外是,InkToolBar样式几乎完全源自高对比度颜色

高对比度主题从8种额外的系统[空白]颜色中提取了大量元素,这些颜色类似于
SystemAccentColor
,是操作系统范围内的值。它们是由模板和/或用户定义的,如果他们选择了高对比度主题,这是Windows10在其个性化设置中的一个选项。高对比度也是一种可访问性功能,因此我认为我将避免覆盖ResourceDictionary,无论应用程序品牌如何


但实际上,通过覆盖XAML框架中的
SystemAccentColor
和24种系统[空白]颜色,您可以在一个应用程序中以一致的方式改变数百种特定的颜色选择。

实际上我就是这么做的。覆盖的SearchBox样式是:但它无法更改某些颜色,例如SearchBoxHitHighlightForeGroundTheMerrush和SearchBoxHitHitHighlightSelectedForeGroundTheMerrush。这在Windows 10 IoT/UWP的RTM版本中对我有效。例如,要覆盖恼人的粉色默认强调笔刷并将品牌颜色放在那里:“默认”键与深色主题相关,请尝试使用“浅色”键添加新行。还要注意StaticResource和Themereseource之间的差异。