gpt4 book ai didi

xaml - 在 UWP 应用程序中覆盖来自 Generic.xaml 的资源

转载 作者:行者123 更新时间:2023-12-05 07:52:40 25 4
gpt4 key购买 nike

这是我的 Generic.xaml,我在其中为我的控件 (CustomControlBackground) 定义了默认背景颜色:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TomShane.Framework.Controls">

<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Default">
<SolidColorBrush x:Key="CustomControlBackground" Color="Gray"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

<Style TargetType="local:CustomControl">
<Setter Property="Background" Value="{ThemeResource CustomControlBackground}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:CustomControl">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

在 App.xaml 中,我想覆盖 Generic.xaml 中的默认背景:

<Application
x:Class="TomShane.Framework.Demo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TomShane.Framework.Demo"
xmlns:ctrl="using:TomShane.Framework.Controls"
RequestedTheme="Dark">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Default">
<SolidColorBrush x:Key="CustomControlBackground" Color="Red"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

通过这种技术,我能够覆盖 UWP 系统资源(如 SystemControlBackgroundBaseLowBrush),但是当我尝试覆盖 CustomControlBackground 时,控件的背景始终保持灰色。

我错过了什么?

最佳答案

逻辑错误。

我们只能在下层作用域 ResourceDictionary 中覆盖上层作用域 ResourceDictionary。实际上,这是关于资源查找行为,而不是关于先加载哪个 xaml 文件

在 WinRT xaml 应用程序中,资源字典范围如下所示(不是 MS 官方图片): enter image description here

基于以上,我们可以在app.xaml中覆盖系统默认资源,我们可以在page.xaml中覆盖系统/应用资源等。

因此,在您的代码中,实际上,在 generic.xaml 中定义的资源将覆盖您在 app.xaml 中定义的资源。如果我们只是从 generic.xaml 中删除资源 CustomControlBackground,您将获得红色背景。

[更新]

如果你确实想要一个默认主题,你可以保留设计,但我们不能为资源字典使用 x:Default。

例如,如果请求的主题是深色(在您的情况下)。您可以简单地使用以下内容来覆盖 app.xaml 中的默认值。

        <ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="CustomControlBackground" Color="Yellow"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

或者您只能将主题放入单独的文件中,并仅在客户端应用程序的 app.xaml 中引用它。但是您必须重写文件才能使用不同的值。

关于xaml - 在 UWP 应用程序中覆盖来自 Generic.xaml 的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33454642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com