From 74b4b24bbd6151606bca6884b850b332fcd4e1bf Mon Sep 17 00:00:00 2001 From: CTimet <2261868330@qq.com> Date: Mon, 10 Aug 2026 16:52:08 +0800 Subject: [PATCH] feat(SearchEdit): Enter handler 1. Add HandleEnterAsSearch property with default value false to maintain old code's behavior. 2. Override OnKeyUp method to process Enter keyUp. It triggers NotifySearchButtonClicked method only if HandleEnterAsSearch is true. Override keyUp rather than keyDown to avoid triggering repeatedly when user press Enter continuously. --- .../Input/SearchEdit.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/AtomUI.Desktop.Controls/Input/SearchEdit.cs b/src/AtomUI.Desktop.Controls/Input/SearchEdit.cs index fde0e4b3e..266bb957f 100644 --- a/src/AtomUI.Desktop.Controls/Input/SearchEdit.cs +++ b/src/AtomUI.Desktop.Controls/Input/SearchEdit.cs @@ -2,6 +2,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; +using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Styling; @@ -28,6 +29,15 @@ public class SearchEdit : LineEdit public static readonly StyledProperty SearchButtonThemeProperty = AvaloniaProperty.Register(nameof(SearchButtonTheme)); + + public static readonly StyledProperty HandleEnterAsSearchProperty = AvaloniaProperty.Register( + nameof(HandleEnterAsSearch), defaultValue: false); //为了不破坏老代码行为,默认值为false,即默认不处理Enter + + public bool HandleEnterAsSearch + { + get => GetValue(HandleEnterAsSearchProperty); + set => SetValue(HandleEnterAsSearchProperty, value); + } public SearchEditButtonStyle SearchButtonStyle { @@ -96,4 +106,25 @@ public class SearchEdit : LineEdit var eventArgs = new RoutedEventArgs(SearchButtonClickEvent, this); RaiseEvent(eventArgs); } + + + //Enter handler + //使用OnKeyUp而不是OnKeyDown,避免用户一直按着Enter一直触发Search + protected override void OnKeyUp(KeyEventArgs e) + { + base.OnKeyUp(e); + + if (!HandleEnterAsSearch) + { + return; + } + + if (e is not { Key: Key.Enter, Handled: false }) + { + return; + } + + NotifySearchButtonClicked(); + e.Handled = true; + } }