Application.RequestedTheme 屬性

定義

取得或設定值,決定應用程式整體主題的淺色深色喜好設定。

public:
 property ApplicationTheme RequestedTheme { ApplicationTheme get(); void set(ApplicationTheme value); };
ApplicationTheme RequestedTheme();

void RequestedTheme(ApplicationTheme value);
public ApplicationTheme RequestedTheme { get; set; }
var applicationTheme = application.requestedTheme;
application.requestedTheme = applicationTheme;
Public Property RequestedTheme As ApplicationTheme
<Application RequestedTheme="applicationThemeMemberName" .../>

屬性值

列舉值。 初始值是使用者在 Windows 設定中設定的預設主題。

範例

此範例示範如何在本機應用程式設定中儲存要求的主題,然後在應用程式重新開機時擷取並套用。

警告

這個簡化的範例取決於符合 ApplicationTheme 列舉值的選項按鈕選項順序:0 = 淺色,1 = 深色。 如果您想要以不同的順序放置它們,或使用選項按鈕以外的 UI,您將需要據以修改程式碼。

<RadioButtons Header="App theme"
              SelectionChanged="AppTheme_SelectionChanged"
              Loaded="RadioButtons_Loaded">
    <x:String>Light</x:String>
    <x:String>Dark</x:String>
    <x:String>Use system setting</x:String>
</RadioButtons>
private void AppTheme_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (sender is RadioButtons rb)
    {
        // Save theme choice to LocalSettings. 
        // ApplicationTheme enum values: 0 = Light, 1 = Dark
        ApplicationData.Current.LocalSettings.Values["themeSetting"] = rb.SelectedIndex;
    }
}

private void RadioButtons_Loaded(object sender, RoutedEventArgs e)
{
    if (sender is RadioButtons rb)
    {
        // Set the RadioButtons selection to the saved value.
        rb.SelectedIndex = (int)ApplicationData.Current.LocalSettings.Values["themeSetting"];
    }
}

App.xaml.cs

public App()
{
    this.InitializeComponent();

    // Get theme choice from LocalSettings.
    object value = ApplicationData.Current.LocalSettings.Values["themeSetting"];

    if (value != null)
    {
        // Apply theme choice if saved value is Light or Dark.
        // Otherwise, don't set it and the Windows Personalization setting is used. 
        if ((int)value == 0 || (int)value == 1)
        {
            App.Current.RequestedTheme = (ApplicationTheme)(int)value;
        }
    }
}

備註

有兩個內建的主題:「Light」 和 「Dark」。 根據預設,您的應用程式會使用 Windows 設定中使用者設定的主題執行, (設定 > 個人化 > 色彩 > 選擇您的預設應用程式模式) 。 您可以設定應用程式的 RequestedTheme 屬性來覆寫使用者預設值,並指定使用的主題。 如果您提供 UI 讓使用者選取應用程式的淺色或深色主題,您也應該提供選項來切換回使用預設值,也就是在 Windows 個人化設定中選取的選項。

只有在應用程式啟動時,才能設定主題,而不是在執行時設定。 嘗試在執行應用程式時設定 RequestedTheme ,會擲回 Microsoft .NET 程式碼 (例外狀況 NotSupportedException) 。 如果您為使用者提供選擇屬於應用程式 UI 一部分的主題的選項,您必須將設定儲存在應用程式資料中,並在應用程式重新開機時套用。 (如需應用程式設定的詳細資訊,請參閱 儲存和擷取設定和其他應用程式資料) 。

如果您使用FrameworkElement.RequestedTheme屬性,並在 UI 中的特定元素上設定值,您可以在執行時間 Application.RequestedTheme 變更特定主題值。

另外還有使用系統值的 「HighContrast」 主題,但應用程式和應用程式程式碼使用不同的技術將應用程式切換為高對比。 如果使用者以高對比模式執行,則會 RequestedTheme 忽略 屬性。 請參閱 對比主題XAML 高對比範例

雖然應用程式無法在執行時間切換主題,但使用者可以。 例如,使用者可能會在您的應用程式執行時啟用高對比主題,方法是使用 Alt+Shift+PrtScn 鍵快捷方式。 如果發生這種情況,XAML 資源系統會重新計算任何 {ThemeResource} 標記延伸 使用量的資源值。 主題適當的資源,例如色彩和筆刷,然後使用適用于目前主題的值,即使它不是原本要求該主題的應用程式也一樣。

主題特定的資源通常會在 XAML 中的個別資源字典中定義。 此資源字典來自用於控制項範本之主要ResourceDictionary 的 ThemeDictionaries屬性。

適用於

另請參閱