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 a232dd9c3..0fb7789ee 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 @@ -827,6 +827,8 @@ namespace AtomUI.Controls.DesignTokens public static readonly TokenResourceKey VerticalDotMargin = new TokenResourceKey("Steps.VerticalDotMargin"); public static readonly TokenResourceKey VerticalItemSpacing = new TokenResourceKey("Steps.VerticalItemSpacing"); public static readonly TokenResourceKey VerticalLabelContentMargin = new TokenResourceKey("Steps.VerticalLabelContentMargin"); + public static readonly TokenResourceKey VerticalNavArrowMargin = new TokenResourceKey("Steps.VerticalNavArrowMargin"); + public static readonly TokenResourceKey VerticalNavArrowMarginSM = new TokenResourceKey("Steps.VerticalNavArrowMarginSM"); public static readonly TokenResourceKey WaitDescriptionColor = new TokenResourceKey("Steps.WaitDescriptionColor"); public static readonly TokenResourceKey WaitDotColor = new TokenResourceKey("Steps.WaitDotColor"); public static readonly TokenResourceKey WaitIconBgColor = new TokenResourceKey("Steps.WaitIconBgColor"); diff --git a/src/AtomUI.Controls/Steps/Steps.cs b/src/AtomUI.Controls/Steps/Steps.cs index 28a1632dc..74a8555a9 100644 --- a/src/AtomUI.Controls/Steps/Steps.cs +++ b/src/AtomUI.Controls/Steps/Steps.cs @@ -377,7 +377,14 @@ public class Steps : SelectingItemsControl, } else { - columnDefinitions.Add(new ColumnDefinition(GridLength.Auto)); + if (Style == StepsStyle.Default || Style == StepsStyle.Inline) + { + columnDefinitions.Add(new ColumnDefinition(GridLength.Auto)); + } + else + { + columnDefinitions.Add(new ColumnDefinition(GridLength.Star)); + } } } _grid.ColumnDefinitions = columnDefinitions; @@ -387,14 +394,7 @@ public class Steps : SelectingItemsControl, var rowDefinitions = new RowDefinitions(); for (var i = 0; i < count; i++) { - if (i != count - 1) - { - rowDefinitions.Add(new RowDefinition(GridLength.Star)); - } - else - { - rowDefinitions.Add(new RowDefinition(GridLength.Auto)); - } + rowDefinitions.Add(new RowDefinition(GridLength.Auto)); } _grid.RowDefinitions = rowDefinitions; } @@ -516,8 +516,7 @@ public class Steps : SelectingItemsControl, protected override void OnPointerPressed(PointerPressedEventArgs e) { base.OnPointerPressed(e); - - if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed && e.Pointer.Type == PointerType.Mouse) + if (IsItemClickable && e.GetCurrentPoint(this).Properties.IsLeftButtonPressed && e.Pointer.Type == PointerType.Mouse) { e.Handled = UpdateSelectionFromEventSource(e.Source); } @@ -525,12 +524,11 @@ public class Steps : SelectingItemsControl, protected override void OnPointerReleased(PointerReleasedEventArgs e) { - if (e.InitialPressMouseButton == MouseButton.Left && e.Pointer.Type != PointerType.Mouse) + if (IsItemClickable && e.InitialPressMouseButton == MouseButton.Left && e.Pointer.Type != PointerType.Mouse) { var container = GetContainerFromEventSource(e.Source); - if (container != null - && container.GetVisualsAt(e.GetPosition(container)) - .Any(c => container == c || container.IsVisualAncestorOf(c))) + if (container != null && container.GetVisualsAt(e.GetPosition(container)) + .Any(c => container == c || container.IsVisualAncestorOf(c))) { e.Handled = UpdateSelectionFromEventSource(e.Source); } diff --git a/src/AtomUI.Controls/Steps/StepsItem.cs b/src/AtomUI.Controls/Steps/StepsItem.cs index ec935b577..fb0f93c7f 100644 --- a/src/AtomUI.Controls/Steps/StepsItem.cs +++ b/src/AtomUI.Controls/Steps/StepsItem.cs @@ -2,7 +2,10 @@ using AtomUI.Animations; using AtomUI.Controls.Themes; using AtomUI.Controls.Utils; using AtomUI.IconPkg; +using AtomUI.Theme.Styling; using Avalonia; +using Avalonia.Animation; +using Avalonia.Animation.Easings; using Avalonia.Controls; using Avalonia.Controls.Metadata; using Avalonia.Controls.Mixins; @@ -144,6 +147,12 @@ public class StepsItem : HeaderedContentControl, ISelectable internal static readonly StyledProperty DescriptionForegroundProperty = AvaloniaProperty.Register(nameof(DescriptionForeground)); + internal static readonly StyledProperty NavIndicatorLineColorProperty = + AvaloniaProperty.Register(nameof(NavIndicatorLineColor)); + + internal static readonly StyledProperty NavIndicatorLineRenderTransformProperty = + AvaloniaProperty.Register(nameof (NavIndicatorLineRenderTransform)); + internal SizeType SizeType { get => GetValue(SizeTypeProperty); @@ -223,6 +232,18 @@ public class StepsItem : HeaderedContentControl, ISelectable get => GetValue(DescriptionForegroundProperty); set => SetValue(DescriptionForegroundProperty, value); } + + internal IBrush? NavIndicatorLineColor + { + get => GetValue(NavIndicatorLineColorProperty); + set => SetValue(NavIndicatorLineColorProperty, value); + } + + internal ITransform? NavIndicatorLineRenderTransform + { + get => GetValue(NavIndicatorLineRenderTransformProperty); + set => SetValue(NavIndicatorLineRenderTransformProperty, value); + } #endregion private StepsItemIndicator? _indicator; @@ -258,6 +279,13 @@ public class StepsItem : HeaderedContentControl, ISelectable { UpdatePseudoClasses(); } + else if (change.Property == IsSelectedProperty) + { + if (_indicator != null) + { + _indicator.IsItemHover = false; + } + } } private void ConfigureTransitions(bool force) @@ -271,7 +299,8 @@ public class StepsItem : HeaderedContentControl, ISelectable TransitionUtils.CreateTransition(BackgroundProperty), TransitionUtils.CreateTransition(ForegroundProperty), TransitionUtils.CreateTransition(SubTitleForegroundProperty), - TransitionUtils.CreateTransition(DescriptionForegroundProperty) + TransitionUtils.CreateTransition(DescriptionForegroundProperty), + TransitionUtils.CreateTransition(NavIndicatorLineRenderTransformProperty, SharedTokenKey.MotionDurationMid, new CubicEaseOut()) ]; } } @@ -296,7 +325,7 @@ public class StepsItem : HeaderedContentControl, ISelectable protected override void OnPointerEntered(PointerEventArgs e) { base.OnPointerEntered(e); - if (_indicator != null) + if (_indicator != null && !IsSelected) { _indicator.IsItemHover = true; } @@ -305,7 +334,7 @@ public class StepsItem : HeaderedContentControl, ISelectable protected override void OnPointerExited(PointerEventArgs e) { base.OnPointerExited(e); - if (_indicator != null) + if (_indicator != null && !IsSelected) { _indicator.IsItemHover = false; } diff --git a/src/AtomUI.Controls/Steps/StepsToken.cs b/src/AtomUI.Controls/Steps/StepsToken.cs index c3f475717..26e198595 100644 --- a/src/AtomUI.Controls/Steps/StepsToken.cs +++ b/src/AtomUI.Controls/Steps/StepsToken.cs @@ -98,6 +98,16 @@ internal class StepsToken : AbstractControlDesignToken /// 垂直标签排列时候内容跟图标之间的外间距 /// public Thickness VerticalLabelContentMargin { get; set; } + + /// + /// 垂直导航类型箭头的外间距 + /// + public Thickness VerticalNavArrowMargin { get; set; } + + /// + /// 垂直导航类型箭头的外间距,小尺寸 + /// + public Thickness VerticalNavArrowMarginSM { get; set; } #region 内部 Token @@ -198,8 +208,10 @@ internal class StepsToken : AbstractControlDesignToken VerticalDescriptionPadding = new Thickness(0, 0, 0, SharedToken.UniformlyPaddingXS); DotLineThickness = SharedToken.LineWidth * 3; - HorizontalDotMargin = new Thickness(SharedToken.UniformlyMarginXS, 0); - VerticalDotMargin = new Thickness(0, SharedToken.UniformlyMarginXS); + HorizontalDotMargin = new Thickness(SharedToken.UniformlyMarginXS, 0); + VerticalDotMargin = new Thickness(0, SharedToken.UniformlyMarginXS); VerticalLabelContentMargin = new Thickness(0, SharedToken.UniformlyMarginSM, 0, 0); + VerticalNavArrowMargin = new Thickness(0, SharedToken.UniformlyMargin); + VerticalNavArrowMarginSM = new Thickness(0, SharedToken.UniformlyMarginSM); } } \ No newline at end of file diff --git a/src/AtomUI.Controls/Steps/Themes/StepsItemTheme.axaml b/src/AtomUI.Controls/Steps/Themes/StepsItemTheme.axaml index a66666175..d042887c8 100644 --- a/src/AtomUI.Controls/Steps/Themes/StepsItemTheme.axaml +++ b/src/AtomUI.Controls/Steps/Themes/StepsItemTheme.axaml @@ -4,7 +4,6 @@ xmlns:atom="https://atomui.net" x:ClassModifier="internal"> - - + @@ -36,7 +35,7 @@ Value="{DynamicResource {x:Static atom:StepsTokenKey.ProcessTitleColor}}" /> - + - + + - - + + - + + + + - - + + + + - + + + + - - - - - - - - - - - + - - - - - - - - - - - - - - - - + IsVisible="{TemplateBinding IsFirst, Converter={x:Static BoolConverters.Not}}" + Grid.Column="0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -476,48 +473,279 @@ - + - + - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +