From 7ac603b18e83d7f5244415aaf1c5e2015a9147f5 Mon Sep 17 00:00:00 2001
From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
Date: Sun, 24 Nov 2024 20:52:39 +0800
Subject: [PATCH] feat: separate theme options.
---
...dSplitter.axaml => GridSplitterDemo.axaml} | 10 +--
...ter.axaml.cs => GridSplitterDemo.axaml.cs} | 5 +-
demo/Semi.Avalonia.Demo/Views/MainView.axaml | 68 ++++++++++++++----
.../Views/MainView.axaml.cs | 69 ++++++++++++++-----
4 files changed, 110 insertions(+), 42 deletions(-)
rename demo/Semi.Avalonia.Demo/Pages/{GridSplitter.axaml => GridSplitterDemo.axaml} (80%)
rename demo/Semi.Avalonia.Demo/Pages/{GridSplitter.axaml.cs => GridSplitterDemo.axaml.cs} (71%)
diff --git a/demo/Semi.Avalonia.Demo/Pages/GridSplitter.axaml b/demo/Semi.Avalonia.Demo/Pages/GridSplitterDemo.axaml
similarity index 80%
rename from demo/Semi.Avalonia.Demo/Pages/GridSplitter.axaml
rename to demo/Semi.Avalonia.Demo/Pages/GridSplitterDemo.axaml
index 0928a67..ef965c6 100644
--- a/demo/Semi.Avalonia.Demo/Pages/GridSplitter.axaml
+++ b/demo/Semi.Avalonia.Demo/Pages/GridSplitterDemo.axaml
@@ -1,5 +1,5 @@
diff --git a/demo/Semi.Avalonia.Demo/Pages/GridSplitter.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/GridSplitterDemo.axaml.cs
similarity index 71%
rename from demo/Semi.Avalonia.Demo/Pages/GridSplitter.axaml.cs
rename to demo/Semi.Avalonia.Demo/Pages/GridSplitterDemo.axaml.cs
index c317cf5..b3f1927 100644
--- a/demo/Semi.Avalonia.Demo/Pages/GridSplitter.axaml.cs
+++ b/demo/Semi.Avalonia.Demo/Pages/GridSplitterDemo.axaml.cs
@@ -1,12 +1,11 @@
-using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
-public partial class GridSplitter : UserControl
+public partial class GridSplitterDemo : UserControl
{
- public GridSplitter()
+ public GridSplitterDemo()
{
InitializeComponent();
}
diff --git a/demo/Semi.Avalonia.Demo/Views/MainView.axaml b/demo/Semi.Avalonia.Demo/Views/MainView.axaml
index 0c12b22..28ff0a8 100644
--- a/demo/Semi.Avalonia.Demo/Views/MainView.axaml
+++ b/demo/Semi.Avalonia.Demo/Views/MainView.axaml
@@ -42,29 +42,67 @@
Text="{ReflectionBinding #tab.SelectedItem.Header}" />
-
-
-
+
@@ -209,4 +247,4 @@
-
+
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Views/MainView.axaml.cs b/demo/Semi.Avalonia.Demo/Views/MainView.axaml.cs
index 3799536..d3e3d97 100644
--- a/demo/Semi.Avalonia.Demo/Views/MainView.axaml.cs
+++ b/demo/Semi.Avalonia.Demo/Views/MainView.axaml.cs
@@ -1,10 +1,12 @@
using System;
-using System.Collections.ObjectModel;
+using System.Collections.Generic;
+using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Styling;
using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
namespace Semi.Avalonia.Demo.Views;
@@ -45,32 +47,61 @@ public partial class MainView : UserControl
public partial class MainViewModel : ObservableObject
{
- public ObservableCollection 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)
- ];
+ public IReadOnlyList MenuItems { get; }
- [ObservableProperty] private ThemeItem? _selectedTheme;
-
- partial void OnSelectedThemeChanged(ThemeItem? oldValue, ThemeItem? newValue)
+ public MainViewModel()
+ {
+ MenuItems =
+ [
+ new MenuItemViewModel
+ {
+ Header = "High Contrast Theme",
+ Items =
+ [
+ new MenuItemViewModel
+ {
+ Header = "Aquatic",
+ Command = SelectThemeCommand,
+ CommandParameter = SemiTheme.Aquatic
+ },
+ new MenuItemViewModel
+ {
+ Header = "Desert",
+ Command = SelectThemeCommand,
+ CommandParameter = SemiTheme.Desert
+ },
+ new MenuItemViewModel
+ {
+ Header = "Dust",
+ Command = SelectThemeCommand,
+ CommandParameter = SemiTheme.Dust
+ },
+ new MenuItemViewModel
+ {
+ Header = "NightSky",
+ Command = SelectThemeCommand,
+ CommandParameter = SemiTheme.NightSky
+ },
+ ]
+ }
+ ];
+ }
+
+ [RelayCommand]
+ public void SelectTheme(object? obj)
{
- if (newValue is null) return;
var app = Application.Current;
if (app is not null)
{
- app.RequestedThemeVariant = newValue.Theme;
+ app.RequestedThemeVariant = obj as ThemeVariant;
}
}
}
-public class ThemeItem(string name, ThemeVariant theme)
+public class MenuItemViewModel
{
- public string Name { get; set; } = name;
- public ThemeVariant Theme { get; set; } = theme;
+ public string? Header { get; set; }
+ public ICommand? Command { get; set; }
+ public object? CommandParameter { get; set; }
+ public IList? Items { get; set; }
}
\ No newline at end of file