feat: 实现SearchEdit Loading状态

This commit is contained in:
yaobiao131
2025-10-20 13:48:07 +08:00
parent 99450dd04b
commit 10d7162c82
4 changed files with 24 additions and 3 deletions
+12 -2
View File
@@ -25,6 +25,9 @@ public class SearchEdit : LineEdit
public static readonly StyledProperty<string> SearchButtonTextProperty =
AvaloniaProperty.Register<SearchEdit, string>(nameof(SearchButtonText));
public static readonly StyledProperty<bool> SearchButtonLoadingProperty = AvaloniaProperty.Register<SearchEdit, bool>(
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<RoutedEventArgs> 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);
}
@@ -18,6 +18,9 @@ internal class SearchEditDecoratedBox : AddOnDecoratedBox
public static readonly StyledProperty<string> SearchButtonTextProperty =
SearchEdit.SearchButtonTextProperty.AddOwner<SearchEditDecoratedBox>();
public static readonly StyledProperty<bool> SearchButtonLoadingProperty = AvaloniaProperty.Register<SearchEditDecoratedBox, bool>(
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
@@ -41,6 +41,7 @@
IsEnabled="{TemplateBinding IsEnabled}"
Icon="{atom:IconProvider SearchOutlined}"
BackgroundSizing="OuterBorderEdge"
IsLoading="{TemplateBinding SearchButtonLoading}"
Content="{TemplateBinding SearchButtonText}"
SizeType="{TemplateBinding SizeType}"/>
</Grid>
@@ -23,7 +23,8 @@
RightAddOnTemplate="{TemplateBinding RightAddOnTemplate}"
RightAddOnBorderThickness="{TemplateBinding BorderThickness}"
SearchButtonStyle="{TemplateBinding SearchButtonStyle}"
SearchButtonText="{TemplateBinding SearchButtonText}">
SearchButtonText="{TemplateBinding SearchButtonText}"
SearchButtonLoading="{TemplateBinding SearchButtonLoading}">
<atom:TextBoxInnerBox
Name="{x:Static atom:TextBoxThemeConstants.TextBoxInnerBoxPart}"
Cursor="Ibeam"