From 4e5d9af7b5e00798747e74c4619e9991de89a8d4 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 3 Mar 2024 16:02:38 +0800 Subject: [PATCH] feat: implement semi style. --- .../ViewModels/BreadcrumbDemoViewModel.cs | 1 + .../Controls/Breadcrumb.axaml | 77 +++++++++++++++---- src/Ursa/Controls/Breadcrumb/Breadcrumb.cs | 18 ++--- .../Controls/Breadcrumb/BreadcrumbItem.cs | 3 + 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs index 591b585..1fd7535 100644 --- a/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs @@ -15,6 +15,7 @@ public class BreadcrumbDemoViewModel: ObservableObject new BreadcrumbDemoItem() { Section = "Page 1", Icon = "Page" }, new BreadcrumbDemoItem() { Section = "Page 2", Icon = "Page" }, new BreadcrumbDemoItem() { Section = "Page 3", Icon = "Page" }, + new BreadcrumbDemoItem() { Section = "Page 4", Icon = "Page" }, }; } } diff --git a/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml b/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml index 30750b8..7d9b206 100644 --- a/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml +++ b/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml @@ -1,36 +1,85 @@ - + - - - - - + + + + + - + - + + - + - - - + + + + + + + + + + + + + + + + + diff --git a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs index 252ebca..4818d40 100644 --- a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs +++ b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs @@ -56,15 +56,6 @@ public class Breadcrumb: ItemsControl get => GetValue(IconTemplateProperty); set => SetValue(IconTemplateProperty, value); } - - public static readonly StyledProperty MaxItemCountProperty = AvaloniaProperty.Register( - nameof(MaxItemCount), defaultValue: 4); - - public int MaxItemCount - { - get => GetValue(MaxItemCountProperty); - set => SetValue(MaxItemCountProperty, value); - } static Breadcrumb() { @@ -84,7 +75,6 @@ public class Breadcrumb: ItemsControl protected override void PrepareContainerForItemOverride(Control container, object? item, int index) { // base.PrepareContainerForItemOverride(container, item, index); - if (container == item) return; if (container is not BreadcrumbItem breadcrumbItem) return; if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty)) { @@ -98,6 +88,10 @@ public class Breadcrumb: ItemsControl breadcrumbItem.Separator = b; }); } + + PseudolassesExtensions.Set(container.Classes, BreadcrumbItem.PC_Last, index == ItemCount - 1); + + if (container == item) return; if(!breadcrumbItem.IsSet(ContentControl.ContentProperty)) { breadcrumbItem.SetCurrentValue(ContentControl.ContentProperty, item); @@ -106,6 +100,10 @@ public class Breadcrumb: ItemsControl breadcrumbItem[!ContentControl.ContentProperty] = DisplayMemberBinding; } } + if (!breadcrumbItem.IsSet(ContentControl.ContentTemplateProperty) && this.ItemTemplate != null) + { + breadcrumbItem.SetCurrentValue(ContentControl.ContentTemplateProperty, this.ItemTemplate); + } if (!breadcrumbItem.IsSet(BreadcrumbItem.IconProperty) && IconBinding != null) { breadcrumbItem[!BreadcrumbItem.IconProperty] = IconBinding; diff --git a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs index c6c38f9..81662ef 100644 --- a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs +++ b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs @@ -1,12 +1,15 @@ using System.Windows.Input; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Metadata; using Avalonia.Controls.Templates; namespace Ursa.Controls; +[PseudoClasses(PC_Last)] public class BreadcrumbItem: ContentControl { + public const string PC_Last = ":last"; public static readonly StyledProperty SeparatorProperty = AvaloniaProperty.Register( nameof(Separator));