Theme functionality

This commit is contained in:
Eric Tian 2020-08-11 21:08:47 -07:00
commit 6cc0b32faf
5 changed files with 89 additions and 4 deletions

View file

@ -70,6 +70,20 @@ App::App()
this->HighContrastAdjustment = ApplicationHighContrastAdjustment::None; this->HighContrastAdjustment = ApplicationHighContrastAdjustment::None;
this->Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending); this->Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending);
auto value = Windows::Storage::ApplicationData::Current->LocalSettings->Values->Lookup(L"themeSetting");
if (value != nullptr)
{
String ^ colorS = safe_cast<String ^>(value);
// Apply theme choice.
if (colorS == L"Dark")
{
App::Current->RequestedTheme = ApplicationTheme::Dark;
}
else if (colorS == L"Light")
{
App::Current->RequestedTheme = ApplicationTheme::Light;
}
}
#if _DEBUG #if _DEBUG
this->DebugSettings->IsBindingTracingEnabled = true; this->DebugSettings->IsBindingTracingEnabled = true;

View file

@ -4770,4 +4770,8 @@
<value>Microsoft Privacy Statment</value> <value>Microsoft Privacy Statment</value>
<comment>Displayed on a link to the Microsoft Privacy Statement on the Settings page.</comment> <comment>Displayed on a link to the Microsoft Privacy Statement on the Settings page.</comment>
</data> </data>
<data name="SettingsRestartNotice" xml:space="preserve">
<value>You'll see your changes the next time you start the app.</value>
<comment>Notice when the user change the theme.</comment>
</data>
</root> </root>

View file

@ -17,7 +17,7 @@
MinHeight="{StaticResource HamburgerHeight}" MinHeight="{StaticResource HamburgerHeight}"
MaxHeight="52"/> MaxHeight="52"/>
<RowDefinition Height="4*"/> <RowDefinition Height="4*"/>
<RowDefinition Height="1*" MaxHeight="32"/> <RowDefinition Height="Auto" MinHeight="32"/>
<RowDefinition Height="4*"/> <RowDefinition Height="4*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
@ -32,17 +32,22 @@
AutomationProperties.HeadingLevel="Level1" AutomationProperties.HeadingLevel="Level1"
TextTrimming="Clip"/> TextTrimming="Clip"/>
<TextBlock x:Name="SettingsRestartApp" Style="{StaticResource BodyTextBlockStyle}"/>
<RadioButton x:Name="SettingsLightTheme" <RadioButton x:Name="SettingsLightTheme"
x:Uid="SettingsLightTheme" x:Uid="SettingsLightTheme"
Grid.Row="2"/> Grid.Row="2"
Checked="LightChecked"/>
<RadioButton x:Name="SettingsDarkTheme" <RadioButton x:Name="SettingsDarkTheme"
x:Uid="SettingsDarkTheme" x:Uid="SettingsDarkTheme"
Grid.Row="3"/> Grid.Row="3"
Checked="DarkChecked"/>
<RadioButton x:Name="SettingsSystemTheme" <RadioButton x:Name="SettingsSystemTheme"
x:Uid="SettingsSystemTheme" x:Uid="SettingsSystemTheme"
Grid.Row="4"/> Grid.Row="4"
Checked="SystemChecked"/>
<HyperlinkButton x:Name="ColorSettingsButton" <HyperlinkButton x:Name="ColorSettingsButton"
Margin="0,-2" Margin="0,-2"

View file

@ -32,10 +32,31 @@ SettingsPage::SettingsPage()
InitializeComponent(); InitializeComponent();
SettingsRestartApp->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Language = locService->GetLanguage(); Language = locService->GetLanguage();
this->SetVersionString(); this->SetVersionString();
this->SetCopyrightString(); this->SetCopyrightString();
auto value = Windows::Storage::ApplicationData::Current->LocalSettings->Values->Lookup(L"themeSetting");
if (value != nullptr)
{
String ^ colorS = safe_cast<String ^>(value);
// Apply theme choice.
if (colorS == L"Dark")
{
SettingsDarkTheme->IsChecked = true;
}
else if (Windows::Storage::ApplicationData::Current->LocalSettings->Values->Lookup(L"isSytemTheme"))
{
SettingsSystemTheme->IsChecked = true;
}
else if (colorS == L"Light")
{
SettingsLightTheme->IsChecked = true;
}
}
} }
void SettingsPage::SetVersionString() void SettingsPage::SetVersionString()
@ -67,3 +88,41 @@ void SettingsPage::SettingsFeedbackButtonClick(_In_ Object ^ sender, _In_ Routed
Launcher::LaunchUriAsync(ref new Uri("windows-feedback:?contextid=130&metadata=%7B%22Metadata%22:[%7B%22AppBuild%22:%22" + versionNumber + "%22%7D]%7D")); Launcher::LaunchUriAsync(ref new Uri("windows-feedback:?contextid=130&metadata=%7B%22Metadata%22:[%7B%22AppBuild%22:%22" + versionNumber + "%22%7D]%7D"));
} }
void SettingsPage::LightChecked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
{
auto resourceLoader = AppResourceProvider::GetInstance();
SettingsRestartApp->Visibility = Windows::UI::Xaml::Visibility::Visible;
SettingsRestartApp->Text = LocalizationStringUtil::GetLocalizedString(resourceLoader->GetResourceString("SettingsRestartNotice"));
Windows::Storage::ApplicationData::Current->LocalSettings->Values->Insert(L"themeSetting", ApplicationTheme::Light.ToString());
}
void SettingsPage::DarkChecked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
{
auto resourceLoader = AppResourceProvider::GetInstance();
SettingsRestartApp->Visibility = Windows::UI::Xaml::Visibility::Visible;
SettingsRestartApp->Text = LocalizationStringUtil::GetLocalizedString(resourceLoader->GetResourceString("SettingsRestartNotice"));
Windows::Storage::ApplicationData::Current->LocalSettings->Values->Insert(L"themeSetting", ApplicationTheme::Dark.ToString());
}
void SettingsPage::SystemChecked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
{
auto resourceLoader = AppResourceProvider::GetInstance();
auto DefaultTheme = ref new Windows::UI::ViewManagement::UISettings();
auto uiTheme = DefaultTheme->GetColorValue(Windows::UI::ViewManagement::UIColorType::Background).ToString();
SettingsRestartApp->Visibility = Windows::UI::Xaml::Visibility::Visible;
SettingsRestartApp->Text = LocalizationStringUtil::GetLocalizedString(resourceLoader->GetResourceString("SettingsRestartNotice"));
Windows::Storage::ApplicationData::Current->LocalSettings->Values->Insert(L"isSytemTheme", true);
if (uiTheme == Windows::UI::Colors::Black.ToString())
{
Windows::Storage::ApplicationData::Current->LocalSettings->Values->Insert(L"themeSetting", ApplicationTheme::Dark.ToString());
}
else if (uiTheme == Windows::UI::Colors::White.ToString())
{
Windows::Storage::ApplicationData::Current->LocalSettings->Values->Insert(L"themeSetting", ApplicationTheme::Light.ToString());
}
}

View file

@ -18,5 +18,8 @@ namespace CalculatorApp
void SettingsFeedbackButtonClick(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e); void SettingsFeedbackButtonClick(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void SetVersionString(); void SetVersionString();
void SetCopyrightString(); void SetCopyrightString();
void LightChecked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void DarkChecked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void SystemChecked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
}; };
} }