覆盖主题画笔Windows 10 UWP

时间:2015-05-22 08:43:33

标签: xaml windows-phone win-universal-app windows-10

我试图在Windows 10中覆盖一些样式颜色,但我无法让它工作。

我的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"/>

然而它不起作用,它不会覆盖任何地方的风格。

2 个答案:

答案 0 :(得分:6)

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

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

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

例如,ListBox使用以下画笔作为其前景,背景和BorderBrush:

  • SystemControlForegroundBaseHighBrush
  • SystemControlBackgroundChromeMediumLowBrush
  • SystemControlForegroundBaseHighBrush

答案 1 :(得分:3)

为了增加Rob的答案,对于那些寻求更广泛的应用范围响应的人来说,它帮助我找到了完整的默认主题,可以在 安装了Windows SDK的\(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic folder,位于themeresources.xaml中。

这是Default,HighContrast和Light的ResourceDictionary。默认键处理UWP中的Dark主题,因为当没有找到默认的“Dark”ResourceDictionary时,它将默认为默认值。

Default和Light 主题有近1000种特定于控件的颜色,或者像Rob所示的更通用的“SystemControlForeground ...”颜色,但在UWP中,它们大多基于以下25种颜色类别:

  • 24 system colors
  • SystemAccentColor,一种操作系统范围内的用户定义颜色,UWP docs在Design&amp; amp; UI&gt;风格&gt;颜色
    • 上面有6个较浅和较暗的阴影(SystemAccentColorLight1...Dark1等),但它们未在默认资源字典中使用。然而.6,.8和.9这种颜色的不透明度被使用了几次,这是唯一一次使用不透明度。

然后还有来自Windows 8.1的300多种颜色类别,它们会手动选择一种特定颜色,您可以看到here

的范围。

上述唯一的例外是InkToolBar样式几乎完全来自高对比度颜色。

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

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