From 10d7162c82f632a8af53d75feaa2e77c8a8fa89b Mon Sep 17 00:00:00 2001 From: yaobiao131 <28655758+yaobiao131@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:48:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0SearchEdit=20Loading?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/AtomUI.Controls/Input/SearchEdit.cs | 14 ++++++++++++-- .../Input/SearchEditDecoratedBox.cs | 9 +++++++++ .../Input/Themes/SearchEditDecoratedBoxTheme.axaml | 1 + .../Input/Themes/SearchEditTheme.axaml | 3 ++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/AtomUI.Controls/Input/SearchEdit.cs b/src/AtomUI.Controls/Input/SearchEdit.cs index 1ec849251..0e185401e 100644 --- a/src/AtomUI.Controls/Input/SearchEdit.cs +++ b/src/AtomUI.Controls/Input/SearchEdit.cs @@ -25,6 +25,9 @@ public class SearchEdit : LineEdit public static readonly StyledProperty SearchButtonTextProperty = AvaloniaProperty.Register(nameof(SearchButtonText)); + public static readonly StyledProperty SearchButtonLoadingProperty = AvaloniaProperty.Register( + nameof(SearchButtonLoading)); + public SearchEditButtonStyle SearchButtonStyle { get => GetValue(SearchButtonStyleProperty); @@ -37,8 +40,14 @@ public class SearchEdit : LineEdit set => SetValue(SearchButtonTextProperty, value); } + public bool SearchButtonLoading + { + get => GetValue(SearchButtonLoadingProperty); + set => SetValue(SearchButtonLoadingProperty, value); + } + #endregion - + #region 公共事件定义 public static readonly RoutedEvent SearchButtonClickEvent = @@ -51,7 +60,7 @@ public class SearchEdit : LineEdit } #endregion - + private IDisposable? _borderThicknessDisposable; protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) @@ -81,6 +90,7 @@ public class SearchEdit : LineEdit internal void NotifySearchButtonClicked() { + if (SearchButtonLoading) return; var eventArgs = new RoutedEventArgs(SearchButtonClickEvent, this); RaiseEvent(eventArgs); } diff --git a/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs b/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs index d00a5ff19..6c071b0fe 100644 --- a/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs +++ b/src/AtomUI.Controls/Input/SearchEditDecoratedBox.cs @@ -18,6 +18,9 @@ internal class SearchEditDecoratedBox : AddOnDecoratedBox public static readonly StyledProperty SearchButtonTextProperty = SearchEdit.SearchButtonTextProperty.AddOwner(); + public static readonly StyledProperty SearchButtonLoadingProperty = AvaloniaProperty.Register( + nameof(SearchButtonLoading)); + public SearchEditButtonStyle SearchButtonStyle { get => GetValue(SearchButtonStyleProperty); @@ -29,6 +32,12 @@ internal class SearchEditDecoratedBox : AddOnDecoratedBox get => GetValue(SearchButtonTextProperty); set => SetValue(SearchButtonTextProperty, value); } + + public bool SearchButtonLoading + { + get => GetValue(SearchButtonLoadingProperty); + set => SetValue(SearchButtonLoadingProperty, value); + } #endregion diff --git a/src/AtomUI.Controls/Input/Themes/SearchEditDecoratedBoxTheme.axaml b/src/AtomUI.Controls/Input/Themes/SearchEditDecoratedBoxTheme.axaml index e0004a8ae..2e392f48d 100644 --- a/src/AtomUI.Controls/Input/Themes/SearchEditDecoratedBoxTheme.axaml +++ b/src/AtomUI.Controls/Input/Themes/SearchEditDecoratedBoxTheme.axaml @@ -41,6 +41,7 @@ IsEnabled="{TemplateBinding IsEnabled}" Icon="{atom:IconProvider SearchOutlined}" BackgroundSizing="OuterBorderEdge" + IsLoading="{TemplateBinding SearchButtonLoading}" Content="{TemplateBinding SearchButtonText}" SizeType="{TemplateBinding SizeType}"/> diff --git a/src/AtomUI.Controls/Input/Themes/SearchEditTheme.axaml b/src/AtomUI.Controls/Input/Themes/SearchEditTheme.axaml index d9bbcc466..e96497b26 100644 --- a/src/AtomUI.Controls/Input/Themes/SearchEditTheme.axaml +++ b/src/AtomUI.Controls/Input/Themes/SearchEditTheme.axaml @@ -23,7 +23,8 @@ RightAddOnTemplate="{TemplateBinding RightAddOnTemplate}" RightAddOnBorderThickness="{TemplateBinding BorderThickness}" SearchButtonStyle="{TemplateBinding SearchButtonStyle}" - SearchButtonText="{TemplateBinding SearchButtonText}"> + SearchButtonText="{TemplateBinding SearchButtonText}" + SearchButtonLoading="{TemplateBinding SearchButtonLoading}">