diff --git a/samples/AtomUI.Demo.Desktop/ShowCase/DropdownButtonShowCase.axaml b/samples/AtomUI.Demo.Desktop/ShowCase/DropdownButtonShowCase.axaml
index 9b1ca1c88..d392529cc 100644
--- a/samples/AtomUI.Demo.Desktop/ShowCase/DropdownButtonShowCase.axaml
+++ b/samples/AtomUI.Demo.Desktop/ShowCase/DropdownButtonShowCase.axaml
@@ -243,5 +243,6 @@
+
\ No newline at end of file
diff --git a/src/AtomUI.Controls/Buttons/BaseButtonTheme.cs b/src/AtomUI.Controls/Buttons/BaseButtonTheme.cs
index 143e51a1e..dbea32c85 100644
--- a/src/AtomUI.Controls/Buttons/BaseButtonTheme.cs
+++ b/src/AtomUI.Controls/Buttons/BaseButtonTheme.cs
@@ -78,9 +78,8 @@ internal abstract class BaseButtonTheme : BaseControlTheme
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Center
+ VerticalAlignment = VerticalAlignment.Center,
};
-
CreateTemplateParentBinding(extraContentPresenter, ContentPresenter.IsVisibleProperty, Button.RightExtraContentProperty,
BindingMode.Default,
ObjectConverters.IsNotNull);
@@ -88,7 +87,7 @@ internal abstract class BaseButtonTheme : BaseControlTheme
DockPanel.SetDock(extraContentPresenter, Dock.Right);
- var rootLayout = new DockPanel()
+ var rootLayout = new DockPanel
{
Name = RootLayoutPart,
LastChildFill = true
@@ -145,7 +144,7 @@ internal abstract class BaseButtonTheme : BaseControlTheme
}
{
var extraContentStyle = new Style(selector => selector.Nesting().Template().Name(RightExtraContentPart));
- extraContentStyle.Add(ContentPresenter.PaddingProperty, ButtonTokenResourceKey.ExtraContentMargin);
+ extraContentStyle.Add(ContentPresenter.MarginProperty, ButtonTokenResourceKey.ExtraContentMargin);
middleSizeStyle.Add(extraContentStyle);
}
Add(middleSizeStyle);
@@ -162,7 +161,7 @@ internal abstract class BaseButtonTheme : BaseControlTheme
}
{
var extraContentStyle = new Style(selector => selector.Nesting().Template().Name(RightExtraContentPart));
- extraContentStyle.Add(ContentPresenter.PaddingProperty, ButtonTokenResourceKey.ExtraContentMarginSM);
+ extraContentStyle.Add(ContentPresenter.MarginProperty, ButtonTokenResourceKey.ExtraContentMarginSM);
smallSizeStyle.Add(extraContentStyle);
}
Add(smallSizeStyle);
diff --git a/src/AtomUI.Controls/Buttons/Button.cs b/src/AtomUI.Controls/Buttons/Button.cs
index 67b6e7fd9..f0109e151 100644
--- a/src/AtomUI.Controls/Buttons/Button.cs
+++ b/src/AtomUI.Controls/Buttons/Button.cs
@@ -503,12 +503,13 @@ public class Button : AvaloniaButton,
normalFilledBrushKey = GlobalTokenResourceKey.ColorPrimary;
selectedFilledBrushKey = GlobalTokenResourceKey.ColorPrimaryActive;
activeFilledBrushKey = GlobalTokenResourceKey.ColorPrimaryHover;
+ if (IsDanger) {
+ normalFilledBrushKey = GlobalTokenResourceKey.ColorError;
+ selectedFilledBrushKey = GlobalTokenResourceKey.ColorErrorActive;
+ activeFilledBrushKey = GlobalTokenResourceKey.ColorErrorBorderHover;
+ }
}
- if (IsDanger) {
- normalFilledBrushKey = GlobalTokenResourceKey.ColorError;
- selectedFilledBrushKey = GlobalTokenResourceKey.ColorErrorActive;
- activeFilledBrushKey = GlobalTokenResourceKey.ColorErrorBorderHover;
- }
+
} else if (ButtonType == ButtonType.Text) {
normalFilledBrushKey = ButtonTokenResourceKey.DefaultColor;
selectedFilledBrushKey = ButtonTokenResourceKey.DefaultColor;
diff --git a/src/AtomUI.Controls/Buttons/ButtonToken.cs b/src/AtomUI.Controls/Buttons/ButtonToken.cs
index 4780a327e..1aa778ee1 100644
--- a/src/AtomUI.Controls/Buttons/ButtonToken.cs
+++ b/src/AtomUI.Controls/Buttons/ButtonToken.cs
@@ -224,6 +224,21 @@ internal class ButtonToken : AbstractControlDesignToken
/// 小号按钮内容字体行高
///
public double ContentLineHeightSM { get; set; } = double.NaN;
+
+ ///
+ /// 按钮右边一个额外的区域对右侧的小号外边距
+ ///
+ public Thickness ExtraContentMarginSM { get; set; }
+
+ ///
+ /// 按钮右边一个额外的区域对右侧的外边距
+ ///
+ public Thickness ExtraContentMargin { get; set; }
+
+ ///
+ /// 按钮右边一个额外的区域对右侧的大号外边距
+ ///
+ public Thickness ExtraContentMarginLG { get; set; }
#region 内部 Token 定义
diff --git a/src/AtomUI.Controls/DropdownButton/DropdownButton.cs b/src/AtomUI.Controls/DropdownButton/DropdownButton.cs
index 71af16534..d6c2d149f 100644
--- a/src/AtomUI.Controls/DropdownButton/DropdownButton.cs
+++ b/src/AtomUI.Controls/DropdownButton/DropdownButton.cs
@@ -49,7 +49,7 @@ public class DropdownButton : Button
public static readonly StyledProperty MouseLeaveDelayProperty =
AvaloniaProperty.Register(nameof(MouseLeaveDelay), 100);
-
+
public static readonly StyledProperty IsShowIndicatorProperty =
AvaloniaProperty.Register(nameof(IsShowIndicator), true);
@@ -117,7 +117,7 @@ public class DropdownButton : Button
get => GetValue(MouseLeaveDelayProperty);
set => SetValue(MouseLeaveDelayProperty, value);
}
-
+
public bool IsShowIndicator
{
get => GetValue(IsShowIndicatorProperty);
@@ -153,11 +153,27 @@ public class DropdownButton : Button
};
BindUtils.RelayBind(this, IconSizeProperty, _openIndicatorIcon, PathIcon.WidthProperty);
BindUtils.RelayBind(this, IconSizeProperty, _openIndicatorIcon, PathIcon.HeightProperty);
- RightExtraContent = _openIndicatorIcon;
base.OnApplyTemplate(e);
TokenResourceBinder.CreateGlobalTokenBinding(this, MarginToAnchorProperty, GlobalTokenResourceKey.MarginXXS);
SetupFlyoutProperties();
+ if (IsShowIndicator) {
+ RightExtraContent = _openIndicatorIcon;
+ }
+ }
+
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs e)
+ {
+ base.OnPropertyChanged(e);
+ if (VisualRoot is not null) {
+ if (e.Property == IsShowIndicatorProperty) {
+ if (IsShowIndicator) {
+ RightExtraContent = _openIndicatorIcon;
+ } else {
+ RightExtraContent = null;
+ }
+ }
+ }
}
protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
@@ -394,9 +410,9 @@ public class DropdownButton : Button
}
protected override void NotifyIconBrushCalculated(in TokenResourceKey normalFilledBrushKey,
- in TokenResourceKey selectedFilledBrushKey,
- in TokenResourceKey activeFilledBrushKey,
- in TokenResourceKey disabledFilledBrushKey)
+ in TokenResourceKey selectedFilledBrushKey,
+ in TokenResourceKey activeFilledBrushKey,
+ in TokenResourceKey disabledFilledBrushKey)
{
if (_openIndicatorIcon is not null) {
TokenResourceBinder.CreateGlobalTokenBinding(_openIndicatorIcon, PathIcon.NormalFilledBrushProperty,
diff --git a/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs b/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs
index 13f7ddb2c..99c57f099 100644
--- a/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs
+++ b/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs
@@ -123,6 +123,9 @@ namespace AtomUI.Theme.Styling
public static readonly TokenResourceKey ContentLineHeight = new TokenResourceKey("Button.ContentLineHeight", "AtomUI.Token");
public static readonly TokenResourceKey ContentLineHeightLG = new TokenResourceKey("Button.ContentLineHeightLG", "AtomUI.Token");
public static readonly TokenResourceKey ContentLineHeightSM = new TokenResourceKey("Button.ContentLineHeightSM", "AtomUI.Token");
+ public static readonly TokenResourceKey ExtraContentMarginSM = new TokenResourceKey("Button.ExtraContentMarginSM", "AtomUI.Token");
+ public static readonly TokenResourceKey ExtraContentMargin = new TokenResourceKey("Button.ExtraContentMargin", "AtomUI.Token");
+ public static readonly TokenResourceKey ExtraContentMarginLG = new TokenResourceKey("Button.ExtraContentMarginLG", "AtomUI.Token");
public static readonly TokenResourceKey IconOnyPadding = new TokenResourceKey("Button.IconOnyPadding", "AtomUI.Token");
public static readonly TokenResourceKey IconOnyPaddingLG = new TokenResourceKey("Button.IconOnyPaddingLG", "AtomUI.Token");
public static readonly TokenResourceKey IconOnyPaddingSM = new TokenResourceKey("Button.IconOnyPaddingSM", "AtomUI.Token");