From 8ba714f436bfbe728fabd3a3ec575b93156a881a Mon Sep 17 00:00:00 2001 From: chinboy Date: Mon, 27 Oct 2025 22:34:56 +0800 Subject: [PATCH] Refactor Transitions configure --- .../PaletteColorItem.cs | 61 +++---------- .../Themes/PaletteColorItemTheme.axaml | 9 +- .../Carousel/CarouselPageIndicator.cs | 54 +++--------- .../Themes/CarouselPageIndicatorTheme.axaml | 21 ++--- .../Collapse/Themes/CollapseItemTheme.axaml | 1 + src/AtomUI.Controls/Expander/Expander.cs | 43 ---------- .../Expander/Themes/ExpanderTheme.axaml | 1 + .../InfoPickerInput/RangeInfoPickerInput.cs | 82 ++++++------------ .../Themes/RangeInfoPickerInputTheme.axaml | 2 +- src/AtomUI.Controls/TabControl/TabControl.cs | 80 +++++++++-------- .../TabControl/TabStrip/TabStrip.cs | 85 ++++++++++--------- .../TabControl/Themes/TabControlTheme.axaml | 3 +- .../Themes/TabStrip/TabStripTheme.axaml | 3 +- 13 files changed, 165 insertions(+), 280 deletions(-) diff --git a/src/AtomUI.Controls.ColorPicker/PaletteColorItem.cs b/src/AtomUI.Controls.ColorPicker/PaletteColorItem.cs index bf39a5a1b..4ff41f1a5 100644 --- a/src/AtomUI.Controls.ColorPicker/PaletteColorItem.cs +++ b/src/AtomUI.Controls.ColorPicker/PaletteColorItem.cs @@ -37,6 +37,9 @@ internal class PaletteColorItem : AvaloniaRadioButton internal static readonly StyledProperty IsMotionEnabledProperty = MotionAwareControlProperty.IsMotionEnabledProperty.AddOwner(); + internal static readonly StyledProperty CheckedMarkRenderTransformProperty = + AvaloniaProperty.Register(nameof (CheckedMarkRenderTransform)); + internal static readonly DirectProperty IsLightColorProperty = AvaloniaProperty.RegisterDirect( nameof(IsLightColor), @@ -48,6 +51,12 @@ internal class PaletteColorItem : AvaloniaRadioButton get => GetValue(IsMotionEnabledProperty); set => SetValue(IsMotionEnabledProperty, value); } + + internal ITransform? CheckedMarkRenderTransform + { + get => GetValue(CheckedMarkRenderTransformProperty); + set => SetValue(CheckedMarkRenderTransformProperty, value); + } private bool _isLightColor; @@ -58,7 +67,6 @@ internal class PaletteColorItem : AvaloniaRadioButton } #endregion - private Icon? _checkedMark; private IDisposable? _borderThicknessDisposable; static PaletteColorItem() @@ -84,7 +92,6 @@ internal class PaletteColorItem : AvaloniaRadioButton if (change.Property == IsMotionEnabledProperty) { ConfigureTransitions(true); - ConfigureCheckedMarkTransitions(true); } } } @@ -104,30 +111,6 @@ internal class PaletteColorItem : AvaloniaRadioButton _borderThicknessDisposable?.Dispose(); } - protected override void OnApplyTemplate(TemplateAppliedEventArgs e) - { - base.OnApplyTemplate(e); - _checkedMark = e.NameScope.Find(PaletteColorItemThemeConstants.CheckedMarkPart); - if (_checkedMark != null) - { - _checkedMark.Loaded += HandleCheckedMarkLoaded; - _checkedMark.Unloaded += HandleCheckedMarkUnLoaded; - } - } - - private void HandleCheckedMarkLoaded(object? sender, RoutedEventArgs e) - { - ConfigureCheckedMarkTransitions(false); - } - - private void HandleCheckedMarkUnLoaded(object? sender, RoutedEventArgs e) - { - if (_checkedMark != null) - { - _checkedMark.Transitions = null; - } - } - private void ConfigureTransitions(bool force) { if (IsMotionEnabled) @@ -136,6 +119,8 @@ internal class PaletteColorItem : AvaloniaRadioButton { Transitions = [ TransitionUtils.CreateTransition(BorderBrushProperty), + TransitionUtils.CreateTransition(CheckedMarkRenderTransformProperty, SharedTokenKey.MotionDurationMid, + new BackEaseOut()) ]; } } @@ -145,30 +130,6 @@ internal class PaletteColorItem : AvaloniaRadioButton } } - private void ConfigureCheckedMarkTransitions(bool force) - { - if (IsMotionEnabled) - { - if (_checkedMark != null) - { - if (force || _checkedMark.Transitions == null) - { - _checkedMark.Transitions = [ - TransitionUtils.CreateTransition(RenderTransformProperty, SharedTokenKey.MotionDurationMid, - new BackEaseOut()), - ]; - } - } - } - else - { - if (_checkedMark != null) - { - _checkedMark.Transitions = null; - } - } - } - protected override void OnLoaded(RoutedEventArgs e) { base.OnLoaded(e); diff --git a/src/AtomUI.Controls.ColorPicker/Themes/PaletteColorItemTheme.axaml b/src/AtomUI.Controls.ColorPicker/Themes/PaletteColorItemTheme.axaml index 487397904..9916309c9 100644 --- a/src/AtomUI.Controls.ColorPicker/Themes/PaletteColorItemTheme.axaml +++ b/src/AtomUI.Controls.ColorPicker/Themes/PaletteColorItemTheme.axaml @@ -19,7 +19,9 @@ IconInfo="{atom:IconInfoProvider CheckBoldOutlined}" HorizontalAlignment="Center" VerticalAlignment="Center" - IsVisible="False" /> + IsVisible="False" + RenderTransform="{TemplateBinding CheckedMarkRenderTransform}" + RenderTransformOrigin="{x:Static RelativePoint.Center}"/> @@ -43,14 +45,15 @@ + + + + + + @@ -59,8 +54,8 @@ - + \ No newline at end of file diff --git a/src/AtomUI.Controls/Collapse/Themes/CollapseItemTheme.axaml b/src/AtomUI.Controls/Collapse/Themes/CollapseItemTheme.axaml index 5cedb4f1d..d98a174da 100644 --- a/src/AtomUI.Controls/Collapse/Themes/CollapseItemTheme.axaml +++ b/src/AtomUI.Controls/Collapse/Themes/CollapseItemTheme.axaml @@ -20,6 +20,7 @@ Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" + IsMotionEnabled="{TemplateBinding IsMotionEnabled}" Icon="{TemplateBinding ExpandIcon}" IsVisible="{TemplateBinding IsShowExpandIcon}" IsEnabled="{TemplateBinding IsEnabled}"/> diff --git a/src/AtomUI.Controls/Expander/Expander.cs b/src/AtomUI.Controls/Expander/Expander.cs index 625ef4dc0..1c07f98f9 100644 --- a/src/AtomUI.Controls/Expander/Expander.cs +++ b/src/AtomUI.Controls/Expander/Expander.cs @@ -1,6 +1,5 @@ using System.Diagnostics; using AtomUI.Controls.Themes; -using AtomUI.Controls.Utils; using AtomUI.IconPkg; using AtomUI.IconPkg.AntDesign; using AtomUI.MotionScene; @@ -9,7 +8,6 @@ using AtomUI.Theme.Data; using AtomUI.Theme.Styling; using AtomUI.Theme.Utils; using Avalonia; -using Avalonia.Animation; using Avalonia.Animation.Easings; using Avalonia.Controls; using Avalonia.Controls.Metadata; @@ -250,15 +248,6 @@ public class Expander : AvaloniaExpander, IsExpanded = !IsExpanded; }; - - _expandButton.Loaded += (sender, args) => - { - ConfigureExpandButtonTransitions(false); - }; - _expandButton.Unloaded += (sender, args) => - { - _expandButton.Transitions = null; - }; } SetupDefaultIcon(); UpdatePseudoClasses(); @@ -274,14 +263,6 @@ public class Expander : AvaloniaExpander, SetupDefaultIcon(); } } - - if (IsLoaded) - { - if (change.Property == IsMotionEnabledProperty) - { - ConfigureExpandButtonTransitions(true); - } - } if (change.Property == IsExpandedProperty) { @@ -438,30 +419,6 @@ public class Expander : AvaloniaExpander, } } - private void ConfigureExpandButtonTransitions(bool force) - { - if (IsMotionEnabled) - { - if (_expandButton != null) - { - if (force || _expandButton.Transitions == null) - { - _expandButton.Transitions = - [ - TransitionUtils.CreateTransition(RenderTransformProperty) - ]; - } - } - } - else - { - if (_expandButton != null) - { - _expandButton.Transitions = null; - } - } - } - private void UpdatePseudoClasses() { PseudoClasses.Set(ExpanderPseudoClass.CustomHeaderPadding, HeaderPadding != null); diff --git a/src/AtomUI.Controls/Expander/Themes/ExpanderTheme.axaml b/src/AtomUI.Controls/Expander/Themes/ExpanderTheme.axaml index 59d38f26a..f6ffc614b 100644 --- a/src/AtomUI.Controls/Expander/Themes/ExpanderTheme.axaml +++ b/src/AtomUI.Controls/Expander/Themes/ExpanderTheme.axaml @@ -24,6 +24,7 @@ Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" + IsMotionEnabled="{TemplateBinding IsMotionEnabled}" Icon="{TemplateBinding ExpandIcon}" IsVisible="{TemplateBinding IsShowExpandIcon}" IsEnabled="{TemplateBinding IsEnabled}" /> diff --git a/src/AtomUI.Controls/Primitives/InfoPickerInput/RangeInfoPickerInput.cs b/src/AtomUI.Controls/Primitives/InfoPickerInput/RangeInfoPickerInput.cs index 2197429f8..2b5be842c 100644 --- a/src/AtomUI.Controls/Primitives/InfoPickerInput/RangeInfoPickerInput.cs +++ b/src/AtomUI.Controls/Primitives/InfoPickerInput/RangeInfoPickerInput.cs @@ -32,7 +32,25 @@ public abstract class RangeInfoPickerInput : InfoPickerInput internal static readonly DirectProperty RangeActivatedPartProperty = AvaloniaProperty.RegisterDirect(nameof(RangeActivatedPart), o => o.RangeActivatedPart); + + internal static readonly StyledProperty RangePickerIndicatorOpacityProperty = + AvaloniaProperty.Register(nameof(RangePickerIndicatorOpacity), 0d); + + internal double RangePickerIndicatorOpacity + { + get => GetValue(RangePickerIndicatorOpacityProperty); + set => SetValue(RangePickerIndicatorOpacityProperty, value); + } + internal static readonly StyledProperty PickerIndicatorOffsetXProperty = + AvaloniaProperty.Register(nameof(PickerIndicatorOffsetX), double.NaN); + + internal static readonly StyledProperty PickerIndicatorOffsetYProperty = + AvaloniaProperty.Register(nameof(PickerIndicatorOffsetY)); + + internal static readonly StyledProperty SecondaryTextProperty = + AvaloniaProperty.Register(nameof(SecondaryText)); + private RangeActivatedPart _rangeActivatedPart; internal RangeActivatedPart RangeActivatedPart @@ -40,28 +58,20 @@ public abstract class RangeInfoPickerInput : InfoPickerInput get => _rangeActivatedPart; set => SetAndRaise(RangeActivatedPartProperty, ref _rangeActivatedPart, value); } - - internal static readonly StyledProperty PickerIndicatorOffsetXProperty = - AvaloniaProperty.Register(nameof(PickerIndicatorOffsetX), double.NaN); - + internal double PickerIndicatorOffsetX { get => GetValue(PickerIndicatorOffsetXProperty); set => SetValue(PickerIndicatorOffsetXProperty, value); } - - internal static readonly StyledProperty PickerIndicatorOffsetYProperty = - AvaloniaProperty.Register(nameof(PickerIndicatorOffsetY)); - + internal double PickerIndicatorOffsetY { get => GetValue(PickerIndicatorOffsetYProperty); set => SetValue(PickerIndicatorOffsetYProperty, value); } - internal static readonly StyledProperty SecondaryTextProperty = - AvaloniaProperty.Register(nameof(SecondaryText)); - + internal string? SecondaryText { get => GetValue(SecondaryTextProperty); @@ -92,17 +102,6 @@ public abstract class RangeInfoPickerInput : InfoPickerInput SecondaryInfoInputBox = e.NameScope.Get(RangeInfoPickerInputThemeConstants.SecondaryInfoInputBoxPart); RangePickerIndicator = e.NameScope.Get(RangeInfoPickerInputThemeConstants.RangePickerIndicatorPart); RangePickerArrow = e.NameScope.Get(RangeInfoPickerInputThemeConstants.RangePickerArrowPart); - if (RangePickerIndicator != null) - { - RangePickerIndicator.Loaded += (sender, args) => - { - ConfigureRangePickerIndicatorTransitions(false); - }; - RangePickerIndicator.Unloaded += (sender, args) => - { - RangePickerIndicator.Transitions = null; - }; - } } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) @@ -111,31 +110,6 @@ public abstract class RangeInfoPickerInput : InfoPickerInput _topLevel = TopLevel.GetTopLevel(this); } - private void ConfigureRangePickerIndicatorTransitions(bool force) - { - if (IsMotionEnabled) - { - if (RangePickerIndicator != null) - { - if (force || RangePickerIndicator.Transitions == null) - { - RangePickerIndicator.Transitions = - [ - TransitionUtils.CreateTransition(OpacityProperty), - TransitionUtils.CreateTransition(OpacityProperty) - ]; - } - } - } - else - { - if (RangePickerIndicator != null) - { - RangePickerIndicator.Transitions = null; - } - } - } - private void ConfigureTransitions(bool force) { if (IsMotionEnabled) @@ -144,7 +118,8 @@ public abstract class RangeInfoPickerInput : InfoPickerInput { Transitions = [ - TransitionUtils.CreateTransition(PickerIndicatorOffsetXProperty) + TransitionUtils.CreateTransition(PickerIndicatorOffsetXProperty), + TransitionUtils.CreateTransition(RangePickerIndicatorOpacityProperty) ]; } } @@ -301,7 +276,6 @@ public abstract class RangeInfoPickerInput : InfoPickerInput if (change.Property == IsMotionEnabledProperty) { ConfigureTransitions(true); - ConfigureRangePickerIndicatorTransitions(true); } } } @@ -370,19 +344,19 @@ public abstract class RangeInfoPickerInput : InfoPickerInput if (_rangeActivatedPart == RangeActivatedPart.None) { - RangePickerIndicator.Opacity = 0; + RangePickerIndicatorOpacity = 0; } else if (_rangeActivatedPart == RangeActivatedPart.Start) { - RangePickerIndicator.Opacity = 1; - RangePickerIndicator.Width = InfoInputBox.Bounds.Width; + RangePickerIndicatorOpacity = 1; + RangePickerIndicator.Width = InfoInputBox.Bounds.Width; var offset = InfoInputBox.TranslatePoint(new Point(0, 0), this) ?? default; PickerIndicatorOffsetX = offset.X; } else if (_rangeActivatedPart == RangeActivatedPart.End) { - RangePickerIndicator.Opacity = 1; - RangePickerIndicator.Width = SecondaryInfoInputBox.Bounds.Width; + RangePickerIndicatorOpacity = 1; + RangePickerIndicator.Width = SecondaryInfoInputBox.Bounds.Width; var offset = SecondaryInfoInputBox.TranslatePoint(new Point(0, 0), this) ?? default; PickerIndicatorOffsetX = offset.X; } diff --git a/src/AtomUI.Controls/Primitives/InfoPickerInput/Themes/RangeInfoPickerInputTheme.axaml b/src/AtomUI.Controls/Primitives/InfoPickerInput/Themes/RangeInfoPickerInputTheme.axaml index 341639af7..3b5dbd49c 100644 --- a/src/AtomUI.Controls/Primitives/InfoPickerInput/Themes/RangeInfoPickerInputTheme.axaml +++ b/src/AtomUI.Controls/Primitives/InfoPickerInput/Themes/RangeInfoPickerInputTheme.axaml @@ -84,7 +84,7 @@ + Opacity="{TemplateBinding RangePickerIndicatorOpacity}" /> diff --git a/src/AtomUI.Controls/TabControl/TabControl.cs b/src/AtomUI.Controls/TabControl/TabControl.cs index 2f2103944..52c5dfb13 100644 --- a/src/AtomUI.Controls/TabControl/TabControl.cs +++ b/src/AtomUI.Controls/TabControl/TabControl.cs @@ -7,6 +7,8 @@ using Avalonia.Animation.Easings; using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; +using Avalonia.Interactivity; +using Avalonia.Media; using Avalonia.Media.Transformation; using Avalonia.VisualTree; @@ -21,11 +23,20 @@ public class TabControl : BaseTabControl internal static readonly StyledProperty SelectedIndicatorThicknessProperty = AvaloniaProperty.Register(nameof(SelectedIndicatorThickness)); + internal static readonly StyledProperty SelectedIndicatorRenderTransformProperty = + AvaloniaProperty.Register(nameof (SelectedIndicatorRenderTransform)); + internal double SelectedIndicatorThickness { get => GetValue(SelectedIndicatorThicknessProperty); set => SetValue(SelectedIndicatorThicknessProperty, value); } + + internal ITransform? SelectedIndicatorRenderTransform + { + get => GetValue(SelectedIndicatorRenderTransformProperty); + set => SetValue(SelectedIndicatorRenderTransformProperty, value); + } #endregion @@ -45,28 +56,6 @@ public class TabControl : BaseTabControl SetupSelectedIndicator(); } } - - private void ConfigureSelectedIndicatorTransitions(bool force) - { - if (_selectedIndicator is not null) - { - if (IsMotionEnabled) - { - if (force || _selectedIndicator.Transitions == null) - { - _selectedIndicator.Transitions = - [ - TransitionUtils.CreateTransition(RenderTransformProperty, - SharedTokenKey.MotionDurationSlow, new ExponentialEaseOut()) - ]; - } - } - else - { - _selectedIndicator.Transitions = null; - } - } - } private void SetupSelectedIndicator() { @@ -101,7 +90,7 @@ public class TabControl : BaseTabControl builder.AppendTranslate(0, offset.Y + selectedBounds.Y); } - _selectedIndicator.RenderTransform = builder.Build(); + SelectedIndicatorRenderTransform = builder.Build(); } } @@ -144,18 +133,6 @@ public class TabControl : BaseTabControl { _scrollViewer.TabControl = this; } - - if (_selectedIndicator != null) - { - _selectedIndicator.Loaded += (sender, args) => - { - ConfigureSelectedIndicatorTransitions(false); - }; - _selectedIndicator.Unloaded += (sender, args) => - { - _selectedIndicator.Transitions = null; - }; - } } protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) @@ -165,8 +142,39 @@ public class TabControl : BaseTabControl { if (change.Property == IsMotionEnabledProperty) { - ConfigureSelectedIndicatorTransitions(true); + ConfigureTransitions(true); } } } + + private void ConfigureTransitions(bool force) + { + if (IsMotionEnabled) + { + if (force || Transitions == null) + { + Transitions = + [ + TransitionUtils.CreateTransition(SelectedIndicatorRenderTransformProperty, + SharedTokenKey.MotionDurationSlow, new ExponentialEaseOut()) + ]; + } + } + else + { + Transitions = null; + } + } + + protected override void OnLoaded(RoutedEventArgs e) + { + base.OnLoaded(e); + ConfigureTransitions(false); + } + + protected override void OnUnloaded(RoutedEventArgs e) + { + base.OnUnloaded(e); + Transitions = null; + } } \ No newline at end of file diff --git a/src/AtomUI.Controls/TabControl/TabStrip/TabStrip.cs b/src/AtomUI.Controls/TabControl/TabStrip/TabStrip.cs index 70e7f01e2..66e4465c5 100644 --- a/src/AtomUI.Controls/TabControl/TabStrip/TabStrip.cs +++ b/src/AtomUI.Controls/TabControl/TabStrip/TabStrip.cs @@ -7,6 +7,8 @@ using Avalonia.Animation.Easings; using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; +using Avalonia.Interactivity; +using Avalonia.Media; using Avalonia.Media.Transformation; using Avalonia.VisualTree; @@ -21,12 +23,21 @@ public class TabStrip : BaseTabStrip internal static readonly StyledProperty SelectedIndicatorThicknessProperty = AvaloniaProperty.Register(nameof(SelectedIndicatorThickness)); + internal static readonly StyledProperty SelectedIndicatorRenderTransformProperty = + AvaloniaProperty.Register(nameof (SelectedIndicatorRenderTransform)); + internal double SelectedIndicatorThickness { get => GetValue(SelectedIndicatorThicknessProperty); set => SetValue(SelectedIndicatorThicknessProperty, value); } + internal ITransform? SelectedIndicatorRenderTransform + { + get => GetValue(SelectedIndicatorRenderTransformProperty); + set => SetValue(SelectedIndicatorRenderTransformProperty, value); + } + #endregion private Border? _selectedIndicator; @@ -45,29 +56,7 @@ public class TabStrip : BaseTabStrip SetupSelectedIndicator(); } } - - private void ConfigureSelectedIndicatorTransitions(bool force) - { - if (_selectedIndicator is not null) - { - if (IsMotionEnabled) - { - if (force || _selectedIndicator.Transitions == null) - { - _selectedIndicator.Transitions = - [ - TransitionUtils.CreateTransition(RenderTransformProperty, - SharedTokenKey.MotionDurationSlow, new ExponentialEaseOut()) - ]; - } - } - else - { - _selectedIndicator.Transitions = null; - } - } - } - + private void SetupSelectedIndicator() { if (_selectedIndicator is not null && SelectedItem is not null && ContainerFromItem(SelectedItem) is TabStripItem tabStripItem) @@ -101,7 +90,7 @@ public class TabStrip : BaseTabStrip builder.AppendTranslate(0, offset.Y + selectedBounds.Y); } - _selectedIndicator.RenderTransform = builder.Build(); + SelectedIndicatorRenderTransform = builder.Build(); } } @@ -144,30 +133,50 @@ public class TabStrip : BaseTabStrip { _scrollViewer.TabStrip = this; } - - if (_selectedIndicator != null) - { - _selectedIndicator.Loaded += (sender, args) => - { - ConfigureSelectedIndicatorTransitions(false); - }; - - _selectedIndicator.Unloaded += (sender, args) => - { - _selectedIndicator.Transitions = null; - }; - } } protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { base.OnPropertyChanged(change); + if (IsLoaded) { if (change.Property == IsMotionEnabledProperty) { - ConfigureSelectedIndicatorTransitions(true); + ConfigureTransitions(true); } } } + + private void ConfigureTransitions(bool force) + { + if (IsMotionEnabled) + { + if (force || Transitions == null) + { + Transitions = + [ + TransitionUtils.CreateTransition(SelectedIndicatorRenderTransformProperty, + SharedTokenKey.MotionDurationSlow, new ExponentialEaseOut()) + ]; + } + } + else + { + Transitions = null; + } + } + + protected override void OnLoaded(RoutedEventArgs e) + { + base.OnLoaded(e); + ConfigureTransitions(false); + } + + protected override void OnUnloaded(RoutedEventArgs e) + { + base.OnUnloaded(e); + Transitions = null; + } + } \ No newline at end of file diff --git a/src/AtomUI.Controls/TabControl/Themes/TabControlTheme.axaml b/src/AtomUI.Controls/TabControl/Themes/TabControlTheme.axaml index d6f9fd0e6..7fb3734b2 100644 --- a/src/AtomUI.Controls/TabControl/Themes/TabControlTheme.axaml +++ b/src/AtomUI.Controls/TabControl/Themes/TabControlTheme.axaml @@ -33,7 +33,8 @@ Name="{x:Static atom:TabControlThemeConstants.ItemsPresenterPart}" ItemsPanel="{TemplateBinding ItemsPanel}" /> + Name="{x:Static atom:TabControlThemeConstants.SelectedItemIndicatorPart}" + RenderTransform="{TemplateBinding SelectedIndicatorRenderTransform}"/> diff --git a/src/AtomUI.Controls/TabControl/Themes/TabStrip/TabStripTheme.axaml b/src/AtomUI.Controls/TabControl/Themes/TabStrip/TabStripTheme.axaml index 53bd837c6..100200be0 100644 --- a/src/AtomUI.Controls/TabControl/Themes/TabStrip/TabStripTheme.axaml +++ b/src/AtomUI.Controls/TabControl/Themes/TabStrip/TabStripTheme.axaml @@ -29,7 +29,8 @@ - +