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