diff --git a/controlgallery/AtomUIGallery/ShowCases/Views/General/FloatButtonShowCase.axaml b/controlgallery/AtomUIGallery/ShowCases/Views/General/FloatButtonShowCase.axaml index dcdb60c65..9ee4103db 100644 --- a/controlgallery/AtomUIGallery/ShowCases/Views/General/FloatButtonShowCase.axaml +++ b/controlgallery/AtomUIGallery/ShowCases/Views/General/FloatButtonShowCase.axaml @@ -9,121 +9,135 @@ Title="Basic" Description="The most basic usage."> - - - + + + + + - + - - - - + + + + + + - + - - - - + + + + + + - + - + - - - - + + + + + + - + - - - - - + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -132,74 +146,110 @@ VerticalAlignment="Top" IsChecked="{Binding IsOpened, Mode=TwoWay}" /> - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + + Description="Customize animation placement, providing four preset placement: top, right, bottom, left, the top position by default."> - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AtomUI.Desktop.Controls/Badge/BadgeColorUtils.cs b/src/AtomUI.Desktop.Controls/Badge/BadgeColorUtils.cs new file mode 100644 index 000000000..2f2d8c12e --- /dev/null +++ b/src/AtomUI.Desktop.Controls/Badge/BadgeColorUtils.cs @@ -0,0 +1,30 @@ +using AtomUI.Theme.Palette; +using Avalonia.Media; + +namespace AtomUI.Desktop.Controls; + +internal static class BadgeColorUtils +{ + internal static IBrush? CalculateColor(string? colorStr) + { + if (string.IsNullOrEmpty(colorStr)) + { + return null; + } + colorStr = colorStr.Trim().ToLower(); + + foreach (var presetColor in PresetPrimaryColor.AllColorTypes()) + { + if (presetColor.Type.ToString().ToLower() == colorStr) + { + return new SolidColorBrush(presetColor.Color()); + } + } + + if (Color.TryParse(colorStr, out var color)) + { + return new SolidColorBrush(color); + } + return null; + } +} \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/Badge/CountBadge.cs b/src/AtomUI.Desktop.Controls/Badge/CountBadge.cs index d958ceb78..3078194ca 100644 --- a/src/AtomUI.Desktop.Controls/Badge/CountBadge.cs +++ b/src/AtomUI.Desktop.Controls/Badge/CountBadge.cs @@ -2,12 +2,10 @@ using AtomUI.Controls; using AtomUI.Data; using AtomUI.Theme; -using AtomUI.Theme.Palette; using AtomUI.Utils; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; -using Avalonia.Media; using Avalonia.Metadata; using Avalonia.VisualTree; @@ -147,7 +145,7 @@ public class CountBadge : Control, HandleDecoratedTargetChanged(); if (BadgeColor is not null) { - SetupBadgeColor(BadgeColor); + ConfigureDotColor(BadgeColor); } } @@ -275,7 +273,7 @@ public class CountBadge : Control, if (change.Property == BadgeColorProperty) { - SetupBadgeColor(change.GetNewValue()); + ConfigureDotColor(change.GetNewValue()); } } @@ -297,23 +295,9 @@ public class CountBadge : Control, BadgeIsVisible = true; } } - - private void SetupBadgeColor(string colorStr) + + private void ConfigureDotColor(string colorStr) { - colorStr = colorStr.Trim().ToLower(); - - foreach (var presetColor in PresetPrimaryColor.AllColorTypes()) - { - if (presetColor.Type.ToString().ToLower() == colorStr) - { - _badgeAdorner!.BadgeColor = new SolidColorBrush(presetColor.Color()); - return; - } - } - - if (Color.TryParse(colorStr, out var color)) - { - _badgeAdorner!.BadgeColor = new SolidColorBrush(color); - } + _badgeAdorner!.BadgeColor = BadgeColorUtils.CalculateColor(colorStr); } } \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/Badge/DotBadge.cs b/src/AtomUI.Desktop.Controls/Badge/DotBadge.cs index 64776cc07..e1ea86d50 100644 --- a/src/AtomUI.Desktop.Controls/Badge/DotBadge.cs +++ b/src/AtomUI.Desktop.Controls/Badge/DotBadge.cs @@ -2,13 +2,11 @@ using AtomUI.Controls; using AtomUI.Data; using AtomUI.Theme; -using AtomUI.Theme.Palette; using AtomUI.Utils; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; using Avalonia.Layout; -using Avalonia.Media; using Avalonia.Metadata; using Avalonia.VisualTree; @@ -29,17 +27,16 @@ public class DotBadge : Control, { #region 公共属性定义 - public static readonly StyledProperty DotColorProperty - = AvaloniaProperty.Register( + public static readonly StyledProperty DotColorProperty = + AvaloniaProperty.Register( nameof(DotColor)); - public static readonly StyledProperty StatusProperty - = AvaloniaProperty.Register( + public static readonly StyledProperty StatusProperty = + AvaloniaProperty.Register( nameof(Status)); - public static readonly StyledProperty TextProperty - = AvaloniaProperty.Register( - nameof(Text)); + public static readonly StyledProperty TextProperty = + AvaloniaProperty.Register(nameof(Text)); public static readonly StyledProperty DecoratedTargetProperty = AvaloniaProperty.Register(nameof(DecoratedTarget)); @@ -132,7 +129,7 @@ public class DotBadge : Control, HandleDecoratedTargetChanged(); if (DotColor is not null) { - SetupDotColor(DotColor); + ConfigureDotColor(DotColor); } } @@ -256,27 +253,14 @@ public class DotBadge : Control, if (change.Property == DotColorProperty) { - SetupDotColor(change.GetNewValue()); + ConfigureDotColor(change.GetNewValue()); } } } - private void SetupDotColor(string colorStr) + private void ConfigureDotColor(string colorStr) { - colorStr = colorStr.Trim().ToLower(); - - foreach (var presetColor in PresetPrimaryColor.AllColorTypes()) - { - if (presetColor.Type.ToString().ToLower() == colorStr) - { - _dotBadgeAdorner!.BadgeDotColor = new SolidColorBrush(presetColor.Color()); - return; - } - } - - if (Color.TryParse(colorStr, out var color)) - { - _dotBadgeAdorner!.BadgeDotColor = new SolidColorBrush(color); - } + _dotBadgeAdorner!.BadgeDotColor = BadgeColorUtils.CalculateColor(colorStr); } + } \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/FloatButton/FloatButton.cs b/src/AtomUI.Desktop.Controls/FloatButton/FloatButton.cs index b62c887d3..6265aca37 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/FloatButton.cs +++ b/src/AtomUI.Desktop.Controls/FloatButton/FloatButton.cs @@ -7,6 +7,7 @@ using AtomUI.Utils; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Metadata; +using Avalonia.Controls.Primitives; using Avalonia.Interactivity; using Avalonia.Media; @@ -66,6 +67,26 @@ public class FloatButton : AvaloniaButton, public static readonly StyledProperty IsMotionEnabledProperty = MotionAwareControlProperty.IsMotionEnabledProperty.AddOwner(); + public static readonly StyledProperty IsBadgeEnabledProperty = + AvaloniaProperty.Register(nameof(IsBadgeEnabled)); + + public static readonly StyledProperty IsDotBadgeProperty = + AvaloniaProperty.Register(nameof(IsDotBadge)); + + public static readonly StyledProperty BadgeCountProperty = + AvaloniaProperty.Register(nameof(BadgeCount)); + + public static readonly StyledProperty BadgeColorProperty = + AvaloniaProperty.Register( + nameof(BadgeColor)); + + public static readonly StyledProperty BadgeOffsetProperty = + AvaloniaProperty.Register(nameof(BadgeOffset)); + + public static readonly StyledProperty BadgeOverflowCountProperty = + AvaloniaProperty.Register(nameof(BadgeOverflowCount), 99, + coerce: (o, v) => Math.Max(0, v)); + public FloatButtonPlacement Placement { get => GetValue(PlacementProperty); @@ -131,7 +152,42 @@ public class FloatButton : AvaloniaButton, get => GetValue(IsMotionEnabledProperty); set => SetValue(IsMotionEnabledProperty, value); } + + public bool IsBadgeEnabled + { + get => GetValue(IsBadgeEnabledProperty); + set => SetValue(IsBadgeEnabledProperty, value); + } + public bool IsDotBadge + { + get => GetValue(IsDotBadgeProperty); + set => SetValue(IsDotBadgeProperty, value); + } + + public int BadgeCount + { + get => GetValue(BadgeCountProperty); + set => SetValue(BadgeCountProperty, value); + } + + public string? BadgeColor + { + get => GetValue(BadgeColorProperty); + set => SetValue(BadgeColorProperty, value); + } + + public Point BadgeOffset + { + get => GetValue(BadgeOffsetProperty); + set => SetValue(BadgeOffsetProperty, value); + } + + public int BadgeOverflowCount + { + get => GetValue(BadgeOverflowCountProperty); + set => SetValue(BadgeOverflowCountProperty, value); + } #endregion #region 内部属性定义 @@ -140,6 +196,10 @@ public class FloatButton : AvaloniaButton, nameof(IsEmbedMode), o => o.IsEmbedMode, (o, v) => o.IsEmbedMode = v); + + internal static readonly StyledProperty BadgeEffectiveColorProperty = + AvaloniaProperty.Register( + nameof(BadgeEffectiveColor)); private bool _isEmbedMode; @@ -149,12 +209,20 @@ public class FloatButton : AvaloniaButton, set => SetAndRaise(IsEmbedModeProperty, ref _isEmbedMode, value); } + internal IBrush? BadgeEffectiveColor + { + get => GetValue(BadgeEffectiveColorProperty); + set => SetValue(BadgeEffectiveColorProperty, value); + } + Control IControlSharedTokenResourcesHost.HostControl => this; string IControlSharedTokenResourcesHost.TokenId => FloatButtonToken.ID; #endregion - ScopeAwareOverlayLayer? _overlayLayer; + private ScopeAwareOverlayLayer? _overlayLayer; + private Canvas? _badgeLayout; + private Control? _badge; public FloatButton() { @@ -174,6 +242,14 @@ public class FloatButton : AvaloniaButton, { CalculatePosition(this, _overlayLayer.Bounds.Size, Placement, FloatOffsetX, FloatOffsetY); } + CalculateBadgePosition(); + } + + protected override void OnApplyTemplate(TemplateAppliedEventArgs e) + { + base.OnApplyTemplate(e); + _badgeLayout = e.NameScope.Find("BadgeLayout"); + ConfigureBadge(); } protected override Size MeasureOverride(Size availableSize) @@ -227,6 +303,20 @@ public class FloatButton : AvaloniaButton, CalculatePosition(this, _overlayLayer.Bounds.Size, Placement, FloatOffsetX, FloatOffsetY); } } + else if (change.Property == IsBadgeEnabledProperty || + change.Property == IsDotBadgeProperty) + + { + ConfigureBadge(); + } + else if (change.Property == BadgeOffsetProperty) + { + CalculateBadgePosition(); + } + else if (change.Property == BadgeColorProperty) + { + SetCurrentValue(BadgeEffectiveColorProperty, BadgeColorUtils.CalculateColor(BadgeColor)); + } } protected override void OnInitialized() @@ -309,6 +399,56 @@ public class FloatButton : AvaloniaButton, CalculatePosition(this, e.NewSize, Placement, FloatOffsetX, FloatOffsetY); } + private void ConfigureBadge() + { + if (_badgeLayout != null) + { + if (IsBadgeEnabled) + { + if (IsDotBadge) + { + var dotBadge = new DotBadgeAdorner(); + dotBadge[!DotBadgeAdorner.BadgeDotColorProperty] = this[!BadgeEffectiveColorProperty]; + dotBadge[!DotBadgeAdorner.IsMotionEnabledProperty] = this[!IsMotionEnabledProperty]; + _badge = dotBadge; + } + else + { + var countBadge = new CountBadgeAdorner(); + countBadge[!CountBadgeAdorner.BadgeColorProperty] = this[!BadgeEffectiveColorProperty]; + countBadge[!CountBadgeAdorner.IsMotionEnabledProperty] = this[!IsMotionEnabledProperty]; + countBadge[!CountBadgeAdorner.CountProperty] = this[!BadgeCountProperty]; + countBadge[!CountBadgeAdorner.OverflowCountProperty] = this[!BadgeOverflowCountProperty]; + _badge = countBadge; + } + + _badgeLayout.Children.Add(_badge); + CalculateBadgePosition(); + } + else + { + if (_badge != null) + { + _badgeLayout.Children.Remove(_badge); + } + _badge = null; + } + } + } + + private void CalculateBadgePosition() + { + if (IsBadgeEnabled && _badge != null) + { + var targetOffsetX = DesiredSize.Width; + var targetOffsetY = 0.0d; + targetOffsetX += BadgeOffset.X; + targetOffsetY += BadgeOffset.Y; + Canvas.SetLeft(_badge, targetOffsetX); + Canvas.SetTop(_badge, targetOffsetY); + } + } + internal static void CalculatePosition(Control floatControl, Size layerSize, FloatButtonPlacement placement, diff --git a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonGroup.cs b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonGroup.cs index 13c0a731f..129542522 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonGroup.cs +++ b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonGroup.cs @@ -278,6 +278,11 @@ public class FloatButtonGroup : TemplatedControl, _triggerButton.PointerExited += HandlePointerExited; } + if (_itemsControl != null) + { + _itemsControl.IsTriggerMode = Trigger != FloatButtonGroupTrigger.Default; + } + _itemsControl?.Children.AddRange(Children); ConfigureTriggerType(); foreach (var item in Children) @@ -404,6 +409,11 @@ public class FloatButtonGroup : TemplatedControl, var inputManager = AvaloniaLocator.Current.GetService()!; _clickTriggerDisposable = inputManager.Process.Subscribe(HandleMouseClick); } + + if (_itemsControl != null) + { + _itemsControl.IsTriggerMode = Trigger != FloatButtonGroupTrigger.Default; + } } private void HandleMouseClick(RawInputEventArgs args) diff --git a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonHost.cs b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonHost.cs index f01518c5c..28fbddb47 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonHost.cs +++ b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonHost.cs @@ -54,6 +54,24 @@ public class FloatButtonHost : TemplatedControl, public static readonly StyledProperty IsMotionEnabledProperty = FloatButton.IsMotionEnabledProperty.AddOwner(); + public static readonly StyledProperty IsBadgeEnabledProperty = + FloatButton.IsBadgeEnabledProperty.AddOwner(); + + public static readonly StyledProperty IsDotBadgeProperty = + FloatButton.IsDotBadgeProperty.AddOwner(); + + public static readonly StyledProperty BadgeCountProperty = + FloatButton.BadgeCountProperty.AddOwner(); + + public static readonly StyledProperty BadgeColorProperty = + FloatButton.BadgeColorProperty.AddOwner(); + + public static readonly StyledProperty BadgeOffsetProperty = + FloatButton.BadgeOffsetProperty.AddOwner(); + + public static readonly StyledProperty BadgeOverflowCountProperty = + FloatButton.BadgeOverflowCountProperty.AddOwner(); + public FloatButtonPlacement Placement { get => GetValue(PlacementProperty); @@ -126,6 +144,42 @@ public class FloatButtonHost : TemplatedControl, get => GetValue(IsMotionEnabledProperty); set => SetValue(IsMotionEnabledProperty, value); } + + public bool IsBadgeEnabled + { + get => GetValue(IsBadgeEnabledProperty); + set => SetValue(IsBadgeEnabledProperty, value); + } + + public bool IsDotBadge + { + get => GetValue(IsDotBadgeProperty); + set => SetValue(IsDotBadgeProperty, value); + } + + public int BadgeCount + { + get => GetValue(BadgeCountProperty); + set => SetValue(BadgeCountProperty, value); + } + + public string? BadgeColor + { + get => GetValue(BadgeColorProperty); + set => SetValue(BadgeColorProperty, value); + } + + public Point BadgeOffset + { + get => GetValue(BadgeOffsetProperty); + set => SetValue(BadgeOffsetProperty, value); + } + + public int BadgeOverflowCount + { + get => GetValue(BadgeOverflowCountProperty); + set => SetValue(BadgeOverflowCountProperty, value); + } #endregion #region 内部属性定义 @@ -189,7 +243,16 @@ public class FloatButtonHost : TemplatedControl, disposables.Add(BindUtils.RelayBind(this, IsMotionEnabledProperty, floatButton, IsMotionEnabledProperty)); disposables.Add(BindUtils.RelayBind(this, PlacementProperty, floatButton, PlacementProperty)); disposables.Add(BindUtils.RelayBind(this, FloatOffsetXProperty, floatButton, FloatOffsetXProperty)); - disposables.Add(BindUtils.RelayBind(this, FloatOffsetXProperty, floatButton, FloatOffsetXProperty)); + disposables.Add(BindUtils.RelayBind(this, FloatOffsetYProperty, floatButton, FloatOffsetYProperty)); + disposables.Add(BindUtils.RelayBind(this, DescriptionProperty, floatButton, FloatButton.ContentProperty)); + disposables.Add(BindUtils.RelayBind(this, DescriptionTemplateProperty, floatButton, FloatButton.ContentTemplateProperty)); + + disposables.Add(BindUtils.RelayBind(this, IsBadgeEnabledProperty, floatButton, IsBadgeEnabledProperty)); + disposables.Add(BindUtils.RelayBind(this, IsDotBadgeProperty, floatButton, IsDotBadgeProperty)); + disposables.Add(BindUtils.RelayBind(this, BadgeCountProperty, floatButton, BadgeCountProperty)); + disposables.Add(BindUtils.RelayBind(this, BadgeColorProperty, floatButton, BadgeColorProperty)); + disposables.Add(BindUtils.RelayBind(this, BadgeOffsetProperty, floatButton, BadgeOffsetProperty)); + disposables.Add(BindUtils.RelayBind(this, BadgeOverflowCountProperty, floatButton, BadgeOverflowCountProperty)); return floatButton; } } \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonItemsControl.cs b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonItemsControl.cs index c0b6fda92..61adb1753 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonItemsControl.cs +++ b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonItemsControl.cs @@ -23,11 +23,11 @@ internal class FloatButtonItemsControl : TemplatedControl public static readonly StyledProperty OrientationProperty = StackPanel.OrientationProperty.AddOwner(); - public static readonly StyledProperty SeparatorBrushProperty = - AvaloniaProperty.Register(nameof(SeparatorBrush)); - public static readonly StyledProperty MenuPlacementProperty = FloatButtonGroup.MenuPlacementProperty.AddOwner(); + + public static readonly StyledProperty IsTriggerModeProperty = + AvaloniaProperty.Register(nameof(IsTriggerMode)); public FloatButtonShape Shape { @@ -47,28 +47,40 @@ internal class FloatButtonItemsControl : TemplatedControl set => SetValue(OrientationProperty, value); } - public IBrush? SeparatorBrush - { - get => GetValue(SeparatorBrushProperty); - set => SetValue(SeparatorBrushProperty, value); - } - public FloatButtonGroupMenuPlacement MenuPlacement { get => GetValue(MenuPlacementProperty); set => SetValue(MenuPlacementProperty, value); } + public bool IsTriggerMode + { + get => GetValue(IsTriggerModeProperty); + set => SetValue(IsTriggerModeProperty, value); + } + [Content] public ControlList Children { get; } = new (); + #endregion + + #region 内部属性定义 + + internal static readonly StyledProperty?> LinesProperty = + AvaloniaProperty.Register?>(nameof(Lines)); + + internal IList<(Point, Point)>? Lines + { + get => GetValue(LinesProperty); + set => SetValue(LinesProperty, value); + } + #endregion private StackPanel? _itemsLayout; static FloatButtonItemsControl() { - AffectsRender(SeparatorBrushProperty); AffectsMeasure(ShapeProperty, OrientationProperty); } @@ -117,22 +129,22 @@ internal class FloatButtonItemsControl : TemplatedControl } } - public override void Render(DrawingContext context) + protected override Size ArrangeOverride(Size finalSize) { - if (Shape == FloatButtonShape.Square && SeparatorBrush != null) + var size = base.ArrangeOverride(finalSize); + if (Shape == FloatButtonShape.Square) { + var lines = new List<(Point, Point)>(); var children = Children.Where(c => c.IsVisible).ToList(); var count = children.Count; - // TODO 没有处理中间隐藏的 Point startPoint = default; Point endPoint = default; - var pen = new Pen(SeparatorBrush); for (var i = 0; i < count; ++i) { if (i != count - 1) { - var child = children[i]; - var childPos = child.TranslatePoint(new Point(0, 0), this); + var child = children[i]; + var childPos = child.TranslatePoint(new Point(0, 0), this); if (childPos != null) { var childBounds = child.Bounds; @@ -146,10 +158,13 @@ internal class FloatButtonItemsControl : TemplatedControl startPoint = new Point(0, childPos.Value.Y + childBounds.Height); endPoint = new Point(DesiredSize.Width, childPos.Value.Y + childBounds.Height); } - context.DrawLine(pen, startPoint, endPoint); + lines.Add((startPoint, endPoint)); } } } + + Lines = lines; } + return size; } } \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonSeparatorLayer.cs b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonSeparatorLayer.cs new file mode 100644 index 000000000..5ed615f5a --- /dev/null +++ b/src/AtomUI.Desktop.Controls/FloatButton/FloatButtonSeparatorLayer.cs @@ -0,0 +1,56 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Layout; +using Avalonia.Media; + +namespace AtomUI.Desktop.Controls; + +internal class FloatButtonSeparatorLayer : Control +{ + #region 公共属性定义 + + public static readonly StyledProperty?> LinesProperty = + AvaloniaProperty.Register?>(nameof(Lines)); + + public static readonly StyledProperty OrientationProperty = + StackPanel.OrientationProperty.AddOwner(); + + public static readonly StyledProperty SeparatorBrushProperty = + AvaloniaProperty.Register(nameof(SeparatorBrush)); + + public IList<(Point, Point)>? Lines + { + get => GetValue(LinesProperty); + set => SetValue(LinesProperty, value); + } + + public Orientation Orientation + { + get => GetValue(OrientationProperty); + set => SetValue(OrientationProperty, value); + } + + public IBrush? SeparatorBrush + { + get => GetValue(SeparatorBrushProperty); + set => SetValue(SeparatorBrushProperty, value); + } + #endregion + + static FloatButtonSeparatorLayer() + { + AffectsRender(LinesProperty, OrientationProperty, SeparatorBrushProperty); + } + + public override void Render(DrawingContext context) + { + if (SeparatorBrush != null && Lines != null) + { + var pen = new Pen(SeparatorBrush); + foreach (var line in Lines) + { + context.DrawLine(pen, line.Item1, line.Item2); + } + } + } +} \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonHostTheme.axaml b/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonHostTheme.axaml index 0bb7c5f41..ef600545a 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonHostTheme.axaml +++ b/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonHostTheme.axaml @@ -8,5 +8,18 @@ + + + + + \ No newline at end of file diff --git a/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonItemsControlTheme.axaml b/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonItemsControlTheme.axaml index 3592736bb..8cb83ea9f 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonItemsControlTheme.axaml +++ b/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonItemsControlTheme.axaml @@ -4,59 +4,89 @@ xmlns:atom="https://atomui.net" x:ClassModifier="internal"> - - - - - - + + + - + + - - - - - - - - + + diff --git a/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonTheme.axaml b/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonTheme.axaml index 88650fb09..4c8a84963 100644 --- a/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonTheme.axaml +++ b/src/AtomUI.Desktop.Controls/FloatButton/Themes/FloatButtonTheme.axaml @@ -7,22 +7,27 @@ @@ -30,28 +35,53 @@ + - + + + + + + + +