From fb0816b2c5c0bb19d0b7a7631b130cd09d9de76c Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sat, 27 Jul 2024 18:20:40 +0800 Subject: [PATCH 1/3] feat: focus dialog after showing modal --- src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs | 1 + src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs | 2 ++ src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs | 1 + 3 files changed, 4 insertions(+) diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs index 5fc4741..7614624 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs @@ -173,6 +173,7 @@ public partial class OverlayDialogHost _modalCount++; IsInModalStatus = _modalCount > 0; control.IsClosed = false; + control.Focus(); } // Handle dialog layer change event diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs index 15e0cd6..074c1ca 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs @@ -67,6 +67,8 @@ public partial class OverlayDialogHost { await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask)); } + + control.Focus(); } private void SetDrawerPosition(DrawerControlBase control) diff --git a/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs b/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs index 3daa31e..e8103cb 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs @@ -20,6 +20,7 @@ public abstract class OverlayFeedbackElement: ContentControl static OverlayFeedbackElement() { + FocusableProperty.OverrideDefaultValue(true); DataContextProperty.Changed.AddClassHandler((o, e) => o.OnDataContextChange(e)); ClosedEvent.AddClassHandler((o,e)=>o.OnClosed(e)); } From 36aa3b9dec8bea49e2a938abe62969fdf66018f4 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 1 Sep 2024 16:26:43 +0800 Subject: [PATCH 2/3] feat: try to focus on dialog and make tab navigation cycled. --- src/Ursa.Themes.Semi/Controls/Dialog.axaml | 2 ++ src/Ursa.Themes.Semi/Controls/UrsaWindow.axaml | 4 +++- src/Ursa/Controls/Dialog/OverlayDialog.cs | 7 +++++++ .../Controls/OverlayShared/OverlayDialogHost.Dialog.cs | 4 ++++ src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs | 2 +- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Ursa.Themes.Semi/Controls/Dialog.axaml b/src/Ursa.Themes.Semi/Controls/Dialog.axaml index 33ae22e..9f13f46 100644 --- a/src/Ursa.Themes.Semi/Controls/Dialog.axaml +++ b/src/Ursa.Themes.Semi/Controls/Dialog.axaml @@ -19,6 +19,7 @@ - + + + ().FirstOrDefault(a => a.Focusable); + element?.Focus(); _modalCount++; IsInModalStatus = _modalCount > 0; control.IsClosed = false; diff --git a/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs b/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs index e8103cb..50cc65a 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayFeedbackElement.cs @@ -20,7 +20,7 @@ public abstract class OverlayFeedbackElement: ContentControl static OverlayFeedbackElement() { - FocusableProperty.OverrideDefaultValue(true); + FocusableProperty.OverrideDefaultValue(false); DataContextProperty.Changed.AddClassHandler((o, e) => o.OnDataContextChange(e)); ClosedEvent.AddClassHandler((o,e)=>o.OnClosed(e)); } From abe42fc189154d1a06326bc0e86b74ca16a72fe3 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Tue, 3 Sep 2024 17:05:33 +0800 Subject: [PATCH 3/3] fix: fix navigation issue for messagebox and drawer. --- src/Ursa.Themes.Semi/Controls/Drawer.axaml | 2 ++ .../Controls/MessageBox.axaml | 12 +++++++----- src/Ursa/Controls/Drawer/Drawer.cs | 19 +++++++++++++------ src/Ursa/Controls/MessageBox/MessageBox.cs | 4 +++- .../OverlayShared/OverlayDialogHost.Drawer.cs | 6 ++++-- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/Ursa.Themes.Semi/Controls/Drawer.axaml b/src/Ursa.Themes.Semi/Controls/Drawer.axaml index b013000..66bb9d9 100644 --- a/src/Ursa.Themes.Semi/Controls/Drawer.axaml +++ b/src/Ursa.Themes.Semi/Controls/Drawer.axaml @@ -11,6 +11,7 @@ - - - + + @@ -61,7 +61,7 @@ Grid.Column="2" Theme="{DynamicResource CloseButton}" /> - - + @@ -155,6 +156,7 @@ (); diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs index 074c1ca..e6bec9d 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs @@ -2,7 +2,9 @@ using Avalonia; using Avalonia.Animation; using Avalonia.Animation.Easings; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.Styling; +using Avalonia.VisualTree; using Irihi.Avalonia.Shared.Shapes; using Ursa.Common; using Ursa.Controls.OverlayShared; @@ -67,8 +69,8 @@ public partial class OverlayDialogHost { await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask)); } - - control.Focus(); + var element = control.GetVisualDescendants().OfType().FirstOrDefault(a => a.Focusable); + element?.Focus(); } private void SetDrawerPosition(DrawerControlBase control)