feat: add Theme Selector.

This commit is contained in:
Zhang Dian
2024-10-16 20:36:13 +08:00
parent dc20007039
commit ec1028fcc8
4 changed files with 73 additions and 11 deletions

View File

@@ -1,9 +1,14 @@
using System;
using System.Collections.ObjectModel;
using Avalonia;
using Avalonia.Styling;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging;
using Semi.Avalonia;
namespace Ursa.Demo.ViewModels;
public class MainViewViewModel : ViewModelBase
public partial class MainViewViewModel : ViewModelBase
{
public MenuViewModel Menus { get; set; } = new MenuViewModel();
@@ -75,4 +80,33 @@ public class MainViewViewModel : ViewModelBase
_ => throw new ArgumentOutOfRangeException(nameof(s), s, null)
};
}
public ObservableCollection<ThemeItem> Themes { get; } =
[
new("Default", ThemeVariant.Default),
new("Light", ThemeVariant.Light),
new("Dark", ThemeVariant.Dark),
new("Aquatic", SemiTheme.Aquatic),
new("Desert", SemiTheme.Desert),
new("Dust", SemiTheme.Dust),
new("NightSky", SemiTheme.NightSky)
];
[ObservableProperty] private ThemeItem? _selectedTheme;
partial void OnSelectedThemeChanged(ThemeItem? oldValue, ThemeItem? newValue)
{
if (newValue is null) return;
var app = Application.Current;
if (app is not null)
{
app.RequestedThemeVariant = newValue.Theme;
}
}
}
public class ThemeItem(string name, ThemeVariant theme)
{
public string Name { get; set; } = name;
public ThemeVariant Theme { get; set; } = theme;
}