fix: fix navigation issue for messagebox and drawer.

This commit is contained in:
rabbitism
2024-09-03 17:05:33 +08:00
parent 36aa3b9dec
commit abe42fc189
5 changed files with 29 additions and 14 deletions

View File

@@ -11,6 +11,7 @@
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="u:CustomDrawerControl"> <ControlTemplate TargetType="u:CustomDrawerControl">
<Border Name="PART_Root" <Border Name="PART_Root"
Focusable="True"
Margin="{TemplateBinding Padding, Converter={x:Static c:ThicknessTakeConverter.Left}}" Margin="{TemplateBinding Padding, Converter={x:Static c:ThicknessTakeConverter.Left}}"
Padding="0" Padding="0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -77,6 +78,7 @@
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="u:DefaultDrawerControl"> <ControlTemplate TargetType="u:DefaultDrawerControl">
<Border Name="PART_Root" <Border Name="PART_Root"
Focusable="True"
Margin="{TemplateBinding Padding, Converter={x:Static c:ThicknessTakeConverter.Left}}" Margin="{TemplateBinding Padding, Converter={x:Static c:ThicknessTakeConverter.Left}}"
Padding="0" Padding="0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"

View File

@@ -33,9 +33,9 @@
<Border Name="PART_TransparencyFallback" IsHitTestVisible="False" /> <Border Name="PART_TransparencyFallback" IsHitTestVisible="False" />
<Border Background="{TemplateBinding Background}" IsHitTestVisible="False" /> <Border Background="{TemplateBinding Background}" IsHitTestVisible="False" />
<Panel Margin="{TemplateBinding WindowDecorationMargin}" Background="Transparent" /> <Panel Margin="{TemplateBinding WindowDecorationMargin}" Background="Transparent" />
<ChromeOverlayLayer /> <VisualLayerManager>
<Grid RowDefinitions="Auto, *, Auto"> <Grid RowDefinitions="Auto, *, Auto">
<Grid <Grid
Grid.Row="0" Grid.Row="0"
Margin="24,24,24,0" Margin="24,24,24,0"
ColumnDefinitions="Auto, *, Auto"> ColumnDefinitions="Auto, *, Auto">
@@ -61,7 +61,7 @@
Grid.Column="2" Grid.Column="2"
Theme="{DynamicResource CloseButton}" /> Theme="{DynamicResource CloseButton}" />
</Grid> </Grid>
<Grid <Grid
Grid.Row="1" Grid.Row="1"
MaxWidth="{DynamicResource MessageBoxWindowContentMaxWidth}" MaxWidth="{DynamicResource MessageBoxWindowContentMaxWidth}"
Margin="{TemplateBinding Padding}" Margin="{TemplateBinding Padding}"
@@ -79,7 +79,7 @@
TextWrapping="Wrap" /> TextWrapping="Wrap" />
</ScrollViewer> </ScrollViewer>
</Grid> </Grid>
<StackPanel <StackPanel
Grid.Row="2" Grid.Row="2"
Margin="24,0,24,24" Margin="24,0,24,24"
HorizontalAlignment="Right" HorizontalAlignment="Right"
@@ -109,6 +109,7 @@
Theme="{DynamicResource SolidButton}" /> Theme="{DynamicResource SolidButton}" />
</StackPanel> </StackPanel>
</Grid> </Grid>
</VisualLayerManager>
</Panel> </Panel>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
@@ -155,6 +156,7 @@
<ControlTemplate TargetType="u:MessageBoxControl"> <ControlTemplate TargetType="u:MessageBoxControl">
<Border <Border
Padding="0" Padding="0"
Focusable="True"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Shadow" Classes="Shadow"

View File

@@ -1,5 +1,6 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input;
using Ursa.Common; using Ursa.Common;
using Ursa.Controls.Options; using Ursa.Controls.Options;
@@ -60,7 +61,8 @@ public static class Drawer
var drawer = new DefaultDrawerControl var drawer = new DefaultDrawerControl
{ {
Content = new TView(), Content = new TView(),
DataContext = vm DataContext = vm,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
ConfigureDefaultDrawer(drawer, options); ConfigureDefaultDrawer(drawer, options);
host.AddModalDrawer(drawer); host.AddModalDrawer(drawer);
@@ -75,7 +77,8 @@ public static class Drawer
var drawer = new DefaultDrawerControl var drawer = new DefaultDrawerControl
{ {
Content = control, Content = control,
DataContext = vm DataContext = vm,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
ConfigureDefaultDrawer(drawer, options); ConfigureDefaultDrawer(drawer, options);
host.AddModalDrawer(drawer); host.AddModalDrawer(drawer);
@@ -92,7 +95,8 @@ public static class Drawer
var drawer = new DefaultDrawerControl var drawer = new DefaultDrawerControl
{ {
Content = view, Content = view,
DataContext = vm DataContext = vm,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
ConfigureDefaultDrawer(drawer, options); ConfigureDefaultDrawer(drawer, options);
host.AddModalDrawer(drawer); host.AddModalDrawer(drawer);
@@ -152,7 +156,8 @@ public static class Drawer
var dialog = new CustomDrawerControl var dialog = new CustomDrawerControl
{ {
Content = new TView(), Content = new TView(),
DataContext = vm DataContext = vm,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
ConfigureCustomDrawer(dialog, options); ConfigureCustomDrawer(dialog, options);
host.AddModalDrawer(dialog); host.AddModalDrawer(dialog);
@@ -167,7 +172,8 @@ public static class Drawer
var dialog = new CustomDrawerControl var dialog = new CustomDrawerControl
{ {
Content = control, Content = control,
DataContext = vm DataContext = vm,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
ConfigureCustomDrawer(dialog, options); ConfigureCustomDrawer(dialog, options);
host.AddModalDrawer(dialog); host.AddModalDrawer(dialog);
@@ -185,7 +191,8 @@ public static class Drawer
var dialog = new CustomDrawerControl var dialog = new CustomDrawerControl
{ {
Content = view, Content = view,
DataContext = vm DataContext = vm,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
ConfigureCustomDrawer(dialog, options); ConfigureCustomDrawer(dialog, options);
host.AddModalDrawer(dialog); host.AddModalDrawer(dialog);

View File

@@ -1,6 +1,7 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Input;
namespace Ursa.Controls; namespace Ursa.Controls;
@@ -63,7 +64,8 @@ public static class MessageBox
Content = message, Content = message,
Title = title, Title = title,
Buttons = button, Buttons = button,
MessageIcon = icon MessageIcon = icon,
[KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle
}; };
host.AddModalDialog(messageControl); host.AddModalDialog(messageControl);
var result = await messageControl.ShowAsync<MessageBoxResult>(); var result = await messageControl.ShowAsync<MessageBoxResult>();

View File

@@ -2,7 +2,9 @@ using Avalonia;
using Avalonia.Animation; using Avalonia.Animation;
using Avalonia.Animation.Easings; using Avalonia.Animation.Easings;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Styling; using Avalonia.Styling;
using Avalonia.VisualTree;
using Irihi.Avalonia.Shared.Shapes; using Irihi.Avalonia.Shared.Shapes;
using Ursa.Common; using Ursa.Common;
using Ursa.Controls.OverlayShared; using Ursa.Controls.OverlayShared;
@@ -67,8 +69,8 @@ public partial class OverlayDialogHost
{ {
await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask)); await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask));
} }
var element = control.GetVisualDescendants().OfType<InputElement>().FirstOrDefault(a => a.Focusable);
control.Focus(); element?.Focus();
} }
private void SetDrawerPosition(DrawerControlBase control) private void SetDrawerPosition(DrawerControlBase control)