UWP (winui 2.5) アプリのテーマを変更したいのですが、次のコードを使用しました
private void OnThemeRadioButtonChecked(object sender, RoutedEventArgs e)
{
var selectedTheme = ((RadioButton)sender)?.Tag?.ToString();
ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
if (selectedTheme != null)
{
App.RootTheme = App.GetEnum<ElementTheme>(selectedTheme);
if (selectedTheme == "Dark")
{
titleBar.ButtonForegroundColor = Colors.White;
}
else if (selectedTheme == "Light")
{
titleBar.ButtonForegroundColor = Colors.Black;
}
else
{
if (Application.Current.RequestedTheme == ApplicationTheme.Dark)
{
titleBar.ButtonForegroundColor = Colors.White;
}
else
{
titleBar.ButtonForegroundColor = Colors.Black;
}
}
}
}
および App.xaml.cs で
public static ElementTheme RootTheme
{
get
{
if (Window.Current.Content is FrameworkElement rootElement)
{
return rootElement.RequestedTheme;
}
return ElementTheme.Default;
}
set
{
if (Window.Current.Content is FrameworkElement rootElement)
{
rootElement.RequestedTheme = value;
}
}
}
public static TEnum GetEnum<TEnum>(string text) where TEnum : struct
{
if (!typeof(TEnum).GetTypeInfo().IsEnum)
{
throw new InvalidOperationException("Generic parameter 'TEnum' must be an enum.");
}
return (TEnum)Enum.Parse(typeof(TEnum), text);
}
しかし、結果は期待されていません ご覧のとおり、ボタンにはテーマの変更に問題があります Microsoft Xaml Controls Gallery サンプル プロジェクトからコードをコピーしました
これは正常に動作するマイクロソフトのサンプルです