AppTheme 资源

借助 AppThemeObjectAppThemeColor,可以为应用程序创建主题感知资源,这些资源会在设备主题更新时自动更新。

AppThemeObjectAppThemeColor 对象是主题感知资源,可以更轻松地处理需要根据应用当前主题进行更改的颜色、图像和其他资源。 这些对象基于 .NET MAUI 中的 AppThemeBinding 概念生成,并且可以更轻松地在 ResourceDictionary 中使用这些类型的资源。

因此,通常应通过 XAML 中的 ThemeResource 标记扩展来使用这些 API。

语法

包括 XAML 命名空间

若要在 XAML 中使用工具包,需要将以下 xmlns 添加到页面或视图中:

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

因此,以下内容:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

</ContentPage>

将被修改为包括 xmlns,如下所示:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">

</ContentPage>

AppThemeResource

AppThemeObject 是泛型主题感知对象,支持为 LightDarkDefault 属性设置任何 object。 由于 AppThemeObject 不是强类型,因此在运行时将计算和强制转换每个属性的值。

警告

如果强制转换无效,则可能会导致运行时异常。

以下示例演示如何通过 ResourceDictionary 使用 AppThemeObject

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    <ContentPage.Resources>
        <toolkit:AppThemeObject Light="dark.png" Dark="light.png" x:Key="MyImageSource" />
    </ContentPage.Resources>

    <VerticalStackLayout>
        <Image Source="{toolkit:AppThemeResource MyImageSource}" />
    </VerticalStackLayout>
</ContentPage>

AppThemeColor

AppThemeColor 是专门的主题感知 Color,支持为 LightDarkDefault 属性设置 Color

以下示例演示如何通过 ResourceDictionary 使用 AppThemeColor

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    <ContentPage.Resources>
        <toolkit:AppThemeColor Light="Red" Dark="Green" x:Key="LabelTextColor" />
    </ContentPage.Resources>

    <VerticalStackLayout>
        <Label TextColor="{toolkit:AppThemeResource LabelTextColor}" />
    </VerticalStackLayout>
</ContentPage>

通过样式使用 AppThemeColor 和 AppThemeResource

由于我们可以在 ResourceDictionary 中使用这些主题感知资源,这意味着我们也可以通过 Style 使用它们。

以下示例演示如何通过 Style 使用 AppThemeColor

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    <ContentPage.Resources>
        <toolkit:AppThemeColor Light="Red" Dark="Green" x:Key="LabelTextColor" />

        <Style x:Key="Headline" TargetType="Label">
            <Setter Property="FontFamily" Value="Segoe UI" />
            <Setter Property="FontSize" Value="10" />
            <Setter Property="TextColor" Value="{toolkit:AppThemeResource LabelTextColor}" />
        </Style>
    </ContentPage.Resources>

    <VerticalStackLayout>
        <Label Style="{StaticResource Headline}" />
    </VerticalStackLayout>
</ContentPage>

可扩展性

AppThemeObjectAppThemeColor 都继承自抽象类 AppThemeObject<T>。 如果需要获取未在 .NET MAUI 社区工具包中提供的更强类型资源,则可以创建自己的继承。

属性

下表介绍了 AppThemeObjectAppThemeColor 的属性。 对于 AppThemeColor,每个属性的类型将为 Color,而不是 object

properties 类型​​ 描述
深色 object 当应用使用深色主题时,应用于此资源所应用到的属性的值。
默认 object 当应用使用浅色或深色主题,并且没有为该主题的相应属性提供任何值时,应用于此资源所应用到的属性的值。
浅色 object 当应用使用浅色主题时,应用于此资源所应用到的属性的值。

示例

可以在 .NET MAUI 社区工具包示例应用程序中查找 AppThemeResource 的示例。

API

可以在 .NET MAUI 社区工具包 GitHub 存储库查看AppThemeResource 的源代码