From 81d54d3b28cd48f5ff016fe380222c0fa6706701 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 10 Jan 2024 22:38:50 +0800 Subject: [PATCH] feat: add default template. --- demo/Ursa.Demo/Models/MenuKeys.cs | 1 + demo/Ursa.Demo/Pages/MessageBoxDemo.axaml | 13 ++++++ demo/Ursa.Demo/Pages/MessageBoxDemo.axaml.cs | 15 +++++++ .../Ursa.Demo/ViewModels/MainViewViewModel.cs | 1 + demo/Ursa.Demo/ViewModels/MenuViewModel.cs | 1 + .../ViewModels/MessageBoxDemoViewModel.cs | 22 ++++++++++ demo/Ursa.Demo/Views/MainWindow.axaml | 2 + .../Controls/MessageBoxWindow.axaml | 41 +++++++++++++++++++ src/Ursa.Themes.Semi/Controls/_index.axaml | 1 + src/Ursa/Controls/MessageBox/MessageBox.cs | 20 ++++++++- .../Controls/MessageBox/MessageBoxWindow.cs | 5 +-- 11 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 demo/Ursa.Demo/Pages/MessageBoxDemo.axaml create mode 100644 demo/Ursa.Demo/Pages/MessageBoxDemo.axaml.cs create mode 100644 demo/Ursa.Demo/ViewModels/MessageBoxDemoViewModel.cs create mode 100644 src/Ursa.Themes.Semi/Controls/MessageBoxWindow.axaml diff --git a/demo/Ursa.Demo/Models/MenuKeys.cs b/demo/Ursa.Demo/Models/MenuKeys.cs index 8532a7f..1b88691 100644 --- a/demo/Ursa.Demo/Models/MenuKeys.cs +++ b/demo/Ursa.Demo/Models/MenuKeys.cs @@ -13,6 +13,7 @@ public static class MenuKeys public const string MenuKeyIconButton = "IconButton"; public const string MenuKeyKeyGestureInput = "KeyGestureInput"; public const string MenuKeyLoading = "Loading"; + public const string MenuKeyMessageBox = "MessageBox"; public const string MenuKeyNavigation = "Navigation"; public const string MenuKeyPagination = "Pagination"; public const string MenuKeyTagInput = "TagInput"; diff --git a/demo/Ursa.Demo/Pages/MessageBoxDemo.axaml b/demo/Ursa.Demo/Pages/MessageBoxDemo.axaml new file mode 100644 index 0000000..e9f6213 --- /dev/null +++ b/demo/Ursa.Demo/Pages/MessageBoxDemo.axaml @@ -0,0 +1,13 @@ + + + + + diff --git a/demo/Ursa.Demo/Pages/MessageBoxDemo.axaml.cs b/demo/Ursa.Demo/Pages/MessageBoxDemo.axaml.cs new file mode 100644 index 0000000..0b5cf40 --- /dev/null +++ b/demo/Ursa.Demo/Pages/MessageBoxDemo.axaml.cs @@ -0,0 +1,15 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Ursa.Demo.ViewModels; + +namespace Ursa.Demo.Pages; + +public partial class MessageBoxDemo : UserControl +{ + public MessageBoxDemo() + { + InitializeComponent(); + this.DataContext = new MessageBoxDemoViewModel(); + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs index d2c59ba..83fea1a 100644 --- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs @@ -35,6 +35,7 @@ public class MainViewViewModel : ViewModelBase MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(), MenuKeys.MenuKeyKeyGestureInput => new KeyGestureInputDemoViewModel(), MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(), + MenuKeys.MenuKeyMessageBox => new MessageBoxDemoViewModel(), MenuKeys.MenuKeyNavigation => new NavigationMenuDemoViewModel(), MenuKeys.MenuKeyPagination => new PaginationDemoViewModel(), MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(), diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs index b2f04b0..c321499 100644 --- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs @@ -22,6 +22,7 @@ public class MenuViewModel: ViewModelBase new() { MenuHeader = "IPv4Box", Key = MenuKeys.MenuKeyIpBox }, new() { MenuHeader = "KeyGestureInput", Key = MenuKeys.MenuKeyKeyGestureInput }, new() { MenuHeader = "Loading", Key = MenuKeys.MenuKeyLoading }, + new() { MenuHeader = "Message Box", Key = MenuKeys.MenuKeyMessageBox }, new() { MenuHeader = "Navigation", Key = MenuKeys.MenuKeyNavigation }, new() { MenuHeader = "Pagination", Key = MenuKeys.MenuKeyPagination }, new() { MenuHeader = "TagInput", Key = MenuKeys.MenuKeyTagInput }, diff --git a/demo/Ursa.Demo/ViewModels/MessageBoxDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/MessageBoxDemoViewModel.cs new file mode 100644 index 0000000..809b95a --- /dev/null +++ b/demo/Ursa.Demo/ViewModels/MessageBoxDemoViewModel.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using System.Windows.Input; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Ursa.Controls; + +namespace Ursa.Demo.ViewModels; + +public class MessageBoxDemoViewModel: ObservableObject +{ + public ICommand DefaultMessageBoxCommand { get; set; } + + public MessageBoxDemoViewModel() + { + DefaultMessageBoxCommand = new AsyncRelayCommand(OnDefaultMessageAsync); + } + + private async Task OnDefaultMessageAsync() + { + await MessageBox.ShowAsync("Hello Message Box"); + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/Views/MainWindow.axaml b/demo/Ursa.Demo/Views/MainWindow.axaml index 054e043..5504e4a 100644 --- a/demo/Ursa.Demo/Views/MainWindow.axaml +++ b/demo/Ursa.Demo/Views/MainWindow.axaml @@ -10,6 +10,8 @@ d:DesignHeight="450" d:DesignWidth="800" x:CompileBindings="True" + ExtendClientAreaTitleBarHeightHint="48" + ExtendClientAreaToDecorationsHint="True" x:DataType="viewModels:MainWindowViewModel" Icon="/Assets/Ursa.ico" mc:Ignorable="d"> diff --git a/src/Ursa.Themes.Semi/Controls/MessageBoxWindow.axaml b/src/Ursa.Themes.Semi/Controls/MessageBoxWindow.axaml new file mode 100644 index 0000000..82ff018 --- /dev/null +++ b/src/Ursa.Themes.Semi/Controls/MessageBoxWindow.axaml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml index f3b1ac5..1fbacb9 100644 --- a/src/Ursa.Themes.Semi/Controls/_index.axaml +++ b/src/Ursa.Themes.Semi/Controls/_index.axaml @@ -11,6 +11,7 @@ + diff --git a/src/Ursa/Controls/MessageBox/MessageBox.cs b/src/Ursa/Controls/MessageBox/MessageBox.cs index 0558ec1..eccf256 100644 --- a/src/Ursa/Controls/MessageBox/MessageBox.cs +++ b/src/Ursa/Controls/MessageBox/MessageBox.cs @@ -1,12 +1,28 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; -namespace Ursa.Controls.MessageBox; +namespace Ursa.Controls; public static class MessageBox { public static async Task ShowAsync(string message) { - var messageWindow = new MessageBoxWindow(); + var messageWindow = new MessageBoxWindow() + { + Content = message + }; + var lifetime = Application.Current?.ApplicationLifetime; + if (lifetime is IClassicDesktopStyleApplicationLifetime classLifetime) + { + var main = classLifetime.MainWindow; + if (main is null) + { + messageWindow.Show(); + } + else + { + await messageWindow.ShowDialog(main); + } + } } } \ No newline at end of file diff --git a/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs b/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs index da1613d..5d2dbef 100644 --- a/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs +++ b/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs @@ -1,7 +1,7 @@ using Avalonia.Controls; using Avalonia.Platform; -namespace Ursa.Controls.MessageBox; +namespace Ursa.Controls; public class MessageBoxWindow: Window { @@ -9,7 +9,6 @@ public class MessageBoxWindow: Window static MessageBoxWindow() { - ExtendClientAreaChromeHintsProperty.OverrideDefaultValue(ExtendClientAreaChromeHints - .NoChrome); + } } \ No newline at end of file