借助 AppThemeObject
和 AppThemeColor
,可以为应用程序创建主题感知资源,这些资源会在设备主题更新时自动更新。
AppThemeObject
和 AppThemeColor
对象是主题感知资源,可以更轻松地处理需要根据应用当前主题进行更改的颜色、图像和其他资源。
这些对象基于 .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
是泛型主题感知对象,支持为 Light
、Dark
和 Default
属性设置任何 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
,支持为 Light
、Dark
和 Default
属性设置 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>
可扩展性
AppThemeObject
和 AppThemeColor
都继承自抽象类 AppThemeObject<T>
。 如果需要获取未在 .NET MAUI 社区工具包中提供的更强类型资源,则可以创建自己的继承。
属性
下表介绍了 AppThemeObject
和 AppThemeColor
的属性。 对于 AppThemeColor
,每个属性的类型将为 Color
,而不是 object
。
properties | 类型 | 描述 |
---|---|---|
深色 | object |
当应用使用深色主题时,应用于此资源所应用到的属性的值。 |
默认 | object |
当应用使用浅色或深色主题,并且没有为该主题的相应属性提供任何值时,应用于此资源所应用到的属性的值。 |
浅色 | object |
当应用使用浅色主题时,应用于此资源所应用到的属性的值。 |
示例
可以在 .NET MAUI 社区工具包示例应用程序中查找 AppThemeResource
的示例。
API
可以在 .NET MAUI 社区工具包 GitHub 存储库查看AppThemeResource
的源代码