AppTheme 資源

使用 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找到 的原始程式碼。