效果
实现
xaml布局
<ComboBox x:Name="ThemeComboBox" SelectedItem="{x:Bind ViewModel.ElementTheme, Mode=TwoWay}" FontSize="15" Margin="{StaticResource XSmallTopMargin}"> <ComboBox.ItemTemplate> <DataTemplate x:DataType="xaml:ElementTheme"> <TextBlock Text="{x:Bind}" /> </DataTemplate> </ComboBox.ItemTemplate> <xaml:ElementTheme>Light</xaml:ElementTheme> <xaml:ElementTheme>Dark</xaml:ElementTheme> <xaml:ElementTheme>Default</xaml:ElementTheme> </ComboBox>
视图模型代码修改
using System.Reflection; using System.Windows.Input; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.UI.Xaml; using app.Contracts.Services; using app.Helpers; using Windows.ApplicationModel; namespace app.ViewModels; public partial class SettingsViewModel : ObservableRecipient { private readonly IThemeSelectorService _themeSelectorService; private ElementTheme _elementTheme; private string _versionDescription; public ElementTheme ElementTheme { get => _elementTheme; set { if (_elementTheme != value) { SetProperty(ref _elementTheme, value); _ = _themeSelectorService.SetThemeAsync(value); } } } public string VersionDescription { get => _versionDescription; set => SetProperty(ref _versionDescription, value); } public SettingsViewModel(IThemeSelectorService themeSelectorService) { _themeSelectorService = themeSelectorService; _elementTheme = _themeSelectorService.Theme; _versionDescription = GetVersionDescription(); } private static string GetVersionDescription() { Version version; if (RuntimeHelper.IsMSIX) { var packageVersion = Package.Current.Id.Version; version = new(packageVersion.Major, packageVersion.Minor, packageVersion.Build, packageVersion.Revision); } else { version = Assembly.GetExecutingAssembly().GetName().Version!; } return $"{"AppDisplayName".GetLocalized()} - {version.Major}.{version.Minor}.{version.Build}.{version.Revision}"; } }
注意修改的部分如下
发表回复