问题 覆盖主题画笔Windows 10 UWP


我试图在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"/>

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


5708
2018-05-22 08:43


起源

“默认”键与Dark主题相关,尝试使用“Light”键添加新行。还要注意StaticResource和ThemeResource之间的区别。 - Bruno Lemos


答案:


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

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

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

例如,ListBox为其Foreground,Background和BorderBrush使用以下画笔:

  • SystemControlForegroundBaseHighBrush
  • SystemControlBackgroundChromeMediumLowBrush
  • SystemControlForegroundBaseHighBrush

6
2018-05-22 20:57



实际上这就是我所做的。重写的SearchBox样式是: pastebin.com/39aG751n 但它不能改变一些颜色,如SearchBoxHitHighlightForegroundThemeBrush和SearchBoxHitHighlightSelectedForegroundThemeBrush - robertk
这在Windows 10 IoT / UWP的RTM版本中对我有用。例如,覆盖恼人的粉红色默认重点画笔并将品牌颜色放在那里:<SolidColorBrush x:Key =“SystemControlForegroundAccentBrush”Color =“{StaticResource YourBrandColorResourceKey}”/> - Tony Wall


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

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

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

  • 24种系统颜色
  • SystemAccentColor,操作系统范围内的用户定义颜色,UWP docs在Design&UI> Style> Color下有一整页
    • 上面有6种浅色和深色(SystemAccentColorLight1...Dark1等等)但它们不用于默认资源字典。然而.6,.8和.9这种颜色的不透明度被使用了几次,这是唯一使用不透明度的时间。

然后是Windows 8.1中剩下的300多种颜色类别,它们会手动选择一种特定的颜色,你可以看到它的大小 这里

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

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

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


3
2018-01-19 21:25