From ff8d4b1dcd1582ad619625e061a484d182216ceb Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 4 Feb 2024 16:06:34 +0800 Subject: [PATCH] WIP: animation. --- demo/Ursa.Demo/Models/MenuKeys.cs | 1 + demo/Ursa.Demo/Pages/DrawerDemo.axaml | 14 +++ demo/Ursa.Demo/Pages/DrawerDemo.axaml.cs | 13 +++ .../ViewModels/DrawerDemoViewModel.cs | 23 ++++ .../Ursa.Demo/ViewModels/MainViewViewModel.cs | 1 + demo/Ursa.Demo/ViewModels/MenuViewModel.cs | 1 + src/Ursa.Themes.Semi/Controls/Drawer.axaml | 44 +++++++ src/Ursa.Themes.Semi/Controls/_index.axaml | 1 + .../Controls/Dialog/DefaultDialogControl.cs | 1 - src/Ursa/Controls/Dialog/OverlayDialogHost.cs | 107 ++++++++++++++++-- .../Controls/Drawer/CustomDrawerControl.cs | 6 + .../Controls/Drawer/DefaultDrawerControl.cs | 35 +++++- src/Ursa/Controls/Drawer/Drawer.cs | 15 ++- src/Ursa/Controls/Drawer/DrawerControlBase.cs | 28 ++++- .../Controls/Layout/DefaultDialogLayout.cs | 8 ++ 15 files changed, 282 insertions(+), 16 deletions(-) create mode 100644 demo/Ursa.Demo/Pages/DrawerDemo.axaml create mode 100644 demo/Ursa.Demo/Pages/DrawerDemo.axaml.cs create mode 100644 demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs create mode 100644 src/Ursa.Themes.Semi/Controls/Drawer.axaml create mode 100644 src/Ursa/Controls/Drawer/CustomDrawerControl.cs create mode 100644 src/Ursa/Controls/Layout/DefaultDialogLayout.cs diff --git a/demo/Ursa.Demo/Models/MenuKeys.cs b/demo/Ursa.Demo/Models/MenuKeys.cs index 2b30912..f97a060 100644 --- a/demo/Ursa.Demo/Models/MenuKeys.cs +++ b/demo/Ursa.Demo/Models/MenuKeys.cs @@ -8,6 +8,7 @@ public static class MenuKeys public const string MenuKeyButtonGroup = "ButtonGroup"; public const string MenuKeyDialog = "Dialog"; public const string MenuKeyDivider = "Divider"; + public const string MenuKeyDrawer = "Drawer"; public const string MenuKeyDualBadge = "DualBadge"; public const string MenuKeyEnumSelector = "EnumSelector"; public const string MenuKeyImageViewer = "ImageViewer"; diff --git a/demo/Ursa.Demo/Pages/DrawerDemo.axaml b/demo/Ursa.Demo/Pages/DrawerDemo.axaml new file mode 100644 index 0000000..10d780a --- /dev/null +++ b/demo/Ursa.Demo/Pages/DrawerDemo.axaml @@ -0,0 +1,14 @@ + + + + + diff --git a/demo/Ursa.Demo/Pages/DrawerDemo.axaml.cs b/demo/Ursa.Demo/Pages/DrawerDemo.axaml.cs new file mode 100644 index 0000000..3aa8916 --- /dev/null +++ b/demo/Ursa.Demo/Pages/DrawerDemo.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Ursa.Demo.Pages; + +public partial class DrawerDemo : UserControl +{ + public DrawerDemo() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs new file mode 100644 index 0000000..ff9fed2 --- /dev/null +++ b/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using System.Windows.Input; +using Avalonia.Controls; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Ursa.Controls; + +namespace Ursa.Demo.ViewModels; + +public class DrawerDemoViewModel: ObservableObject +{ + public ICommand OpenDrawerCommand { get; set; } + + public DrawerDemoViewModel() + { + OpenDrawerCommand = new AsyncRelayCommand(OpenDrawer); + } + + private async Task OpenDrawer() + { + await Drawer.Show("Hello World"); + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs index 50ab100..6161fde 100644 --- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs @@ -30,6 +30,7 @@ public class MainViewViewModel : ViewModelBase MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(), MenuKeys.MenuKeyDialog => new DialogDemoViewModel(), MenuKeys.MenuKeyDivider => new DividerDemoViewModel(), + MenuKeys.MenuKeyDrawer => new DrawerDemoViewModel(), MenuKeys.MenuKeyDualBadge => new DualBadgeDemoViewModel(), MenuKeys.MenuKeyEnumSelector => new EnumSelectorDemoViewModel(), MenuKeys.MenuKeyImageViewer => new ImageViewerDemoViewModel(), diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs index 672c5b4..45fa3b4 100644 --- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs @@ -17,6 +17,7 @@ public class MenuViewModel: ViewModelBase new() { MenuHeader = "Button Group", Key = MenuKeys.MenuKeyButtonGroup, Status = "Updated"}, new() { MenuHeader = "Dialog", Key = MenuKeys.MenuKeyDialog }, new() { MenuHeader = "Divider", Key = MenuKeys.MenuKeyDivider }, + new() { MenuHeader = "Drawer", Key = MenuKeys.MenuKeyDrawer }, new() { MenuHeader = "DualBadge", Key = MenuKeys.MenuKeyDualBadge }, new() { MenuHeader = "Enum Selector", Key = MenuKeys.MenuKeyEnumSelector }, new() { MenuHeader = "Icon Button", Key = MenuKeys.MenuKeyIconButton }, diff --git a/src/Ursa.Themes.Semi/Controls/Drawer.axaml b/src/Ursa.Themes.Semi/Controls/Drawer.axaml new file mode 100644 index 0000000..31b3a54 --- /dev/null +++ b/src/Ursa.Themes.Semi/Controls/Drawer.axaml @@ -0,0 +1,44 @@ + + + + + + + + + + + + +