From c139bb143506aee50d59251982df13bb1461404b Mon Sep 17 00:00:00 2001 From: "L.WLe" <184483622@qq.com> Date: Fri, 25 Jul 2025 17:13:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(SearchEdit):=20=E6=B7=BB=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E6=90=9C=E7=B4=A2=E6=8C=89=E9=92=AE=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6SearchButtonClick?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/AtomUI.Controls/Input/SearchEdit.cs | 22 +++++++++++++ .../Input/SearchEditDecoratedBox.cs | 33 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/AtomUI.Controls/Input/SearchEdit.cs b/src/AtomUI.Controls/Input/SearchEdit.cs index 9c32a7b44..2b9bdab09 100644 --- a/src/AtomUI.Controls/Input/SearchEdit.cs +++ b/src/AtomUI.Controls/Input/SearchEdit.cs @@ -3,6 +3,7 @@ using AtomUI.Theme.Data; using AtomUI.Theme.Styling; using Avalonia; using Avalonia.Data; +using Avalonia.Interactivity; namespace AtomUI.Controls; @@ -36,6 +37,21 @@ public class SearchEdit : LineEdit #endregion + #region 公共事件定义 + + + public static readonly RoutedEvent SearchButtonClickEvent = + RoutedEvent.Register(nameof(SearchButtonClick), RoutingStrategies.Bubble); + + + public event EventHandler? SearchButtonClick + { + add => AddHandler(SearchButtonClickEvent, value); + remove => RemoveHandler(SearchButtonClickEvent, value); + } + + #endregion + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); @@ -44,4 +60,10 @@ public class SearchEdit : LineEdit BindingPriority.Template, new RenderScaleAwareThicknessConfigure(this))); } + + internal void OnSearchButtonClick(RoutedEventArgs e) + { + var eventArgs = new RoutedEventArgs(SearchButtonClickEvent, this); + RaiseEvent(eventArgs); + } } \ No newline at end of file diff --git a/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs b/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs index 49154973a..0e686788c 100644 --- a/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs +++ b/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs @@ -3,6 +3,8 @@ using AtomUI.Data; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; +using Avalonia.Interactivity; +using Avalonia.LogicalTree; namespace AtomUI.Controls; @@ -32,6 +34,7 @@ public class SearchEditDecoratedBox : AddOnDecoratedBox private Rect? _originRect; private Button? _searchButton; + private SearchEdit? _ownerSearchEdit; protected override void NotifyAddOnBorderInfoCalculated() { @@ -57,12 +60,42 @@ public class SearchEditDecoratedBox : AddOnDecoratedBox protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); + + if (_searchButton is not null) + { + _searchButton.Click -= HandleSearchButtonClick; + } + _searchButton = e.NameScope.Find