From d958f0238706cd6fe2ddf23ce7fd179b9a78f2e9 Mon Sep 17 00:00:00 2001 From: workgroupengineering Date: Thu, 25 Apr 2024 03:16:48 +0200 Subject: [PATCH] feat(TabControl): Enable Recognizes AccessKey (#15013) * feat(TabControl): Enable Recognizes AccessKey * update sample * test: Should_TabControl_Recognizes_AccessKey * fix: test * fix: using --------- Co-authored-by: Max Katz --- .../ControlCatalog/Pages/TabControlPage.xaml | 8 +- src/Avalonia.Controls/TabItem.cs | 9 ++ .../Controls/TabItem.xaml | 4 +- .../Controls/TabItem.xaml | 4 +- .../TabControlTests.cs | 120 ++++++++++++++++-- tests/Avalonia.UnitTests/TestServices.cs | 19 +-- .../Avalonia.UnitTests/UnitTestApplication.cs | 7 +- 7 files changed, 144 insertions(+), 27 deletions(-) diff --git a/samples/ControlCatalog/Pages/TabControlPage.xaml b/samples/ControlCatalog/Pages/TabControlPage.xaml index 1faa74c1ce..abcad56e9b 100644 --- a/samples/ControlCatalog/Pages/TabControlPage.xaml +++ b/samples/ControlCatalog/Pages/TabControlPage.xaml @@ -29,7 +29,7 @@ DockPanel.Dock="Top" Classes="h2" Text="A tab control that displays a tab strip along with the content of the selected tab" - Margin="4"> + Margin="4"> - + This is the first page in the TabControl. - + This is the second page in the TabControl. - + You should not see this. diff --git a/src/Avalonia.Controls/TabItem.cs b/src/Avalonia.Controls/TabItem.cs index c0bb19dd1f..9bffacd921 100644 --- a/src/Avalonia.Controls/TabItem.cs +++ b/src/Avalonia.Controls/TabItem.cs @@ -4,6 +4,8 @@ using Avalonia.Automation.Peers; using Avalonia.Controls.Metadata; using Avalonia.Controls.Mixins; using Avalonia.Controls.Primitives; +using Avalonia.Input; +using Avalonia.Interactivity; namespace Avalonia.Controls { @@ -37,6 +39,7 @@ namespace Avalonia.Controls FocusableProperty.OverrideDefaultValue(typeof(TabItem), true); DataContextProperty.Changed.AddClassHandler((x, e) => x.UpdateHeader(e)); AutomationProperties.ControlTypeOverrideProperty.OverrideDefaultValue(AutomationControlType.TabItem); + AccessKeyHandler.AccessKeyPressedEvent.AddClassHandler((tabItem, args) => tabItem.TabItemActivated(args)); } /// @@ -91,5 +94,11 @@ namespace Avalonia.Controls } } } + + private void TabItemActivated(RoutedEventArgs args) + { + SetCurrentValue(IsSelectedProperty, true); + args.Handled = true; + } } } diff --git a/src/Avalonia.Themes.Fluent/Controls/TabItem.xaml b/src/Avalonia.Themes.Fluent/Controls/TabItem.xaml index ce3cecb0c0..085fc3165f 100644 --- a/src/Avalonia.Themes.Fluent/Controls/TabItem.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/TabItem.xaml @@ -40,7 +40,9 @@ HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Header}" - ContentTemplate="{TemplateBinding HeaderTemplate}" /> + ContentTemplate="{TemplateBinding HeaderTemplate}" + RecognizesAccessKey="True" + /> + CornerRadius="{TemplateBinding CornerRadius}" + RecognizesAccessKey="True" + />