使用 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 不是強型別,所以在執行階段會對每個屬性的值進行求值並轉型。
警告
如果轉換無效,這可能會導致運行時間例外狀況。
下列範例示範如何透過 AppThemeObject使用 ResourceDictionary :
<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。
下列範例示範如何透過 AppThemeColor使用 ResourceDictionary :
<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 使用它們。
下列範例示範如何透過 AppThemeColor使用 Style :
<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 Community Toolkit 未提供的、更強型別化的資源,您可以建立自己的衍生類別。
屬性
下表說明 AppThemeObject 和 AppThemeColor 的屬性。 對於 AppThemeColor,每個屬性的類型將會是 Color,而不是 object。
| 屬性 | 類型 | 描述 |
|---|---|---|
| 深色 | object |
當應用程式使用深色主題時,套用至這個資源所套用之屬性的值。 |
| 預設 | object |
當應用程式使用淺色或深色主題,且該主題的對應屬性沒有提供任何值時,套用至這個資源所套用的屬性的值。 |
| 淺色 | object |
當應用程式使用淺色主題時,這個資源套用至其目標屬性的值。 |
範例
您可以在 .NET MAUI Community Toolkit 範例應用程式 中找到 AppThemeResource 的實際運作範例。
API
您可以在 .NET MAUI Community Toolkit GitHub 存放庫AppThemeResource找到 的原始程式碼。