From 39bc26c28e0b792416ae10efef420412323c1b23 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 3 Mar 2024 00:09:30 +0800 Subject: [PATCH] feat: make sure separator is from correct level. --- demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml | 6 ++- .../Controls/Breadcrumb.axaml | 1 + src/Ursa/Controls/Breadcrumb/Breadcrumb.cs | 42 +++++++++++++++---- .../Controls/Breadcrumb/BreadcrumbItem.cs | 2 +- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml index ac75e8b..21ef4b6 100644 --- a/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml +++ b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml @@ -7,9 +7,11 @@ d:DesignHeight="450" x:Class="Ursa.Demo.Pages.BreadcrumbDemo"> - + - + + + diff --git a/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml b/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml index 68719e0..952f592 100644 --- a/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml +++ b/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml @@ -17,6 +17,7 @@ + diff --git a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs index 384c364..1c308a2 100644 --- a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs +++ b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs @@ -57,6 +57,15 @@ 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() { @@ -79,20 +88,35 @@ public class Breadcrumb: ItemsControl if (container is not BreadcrumbItem breadcrumbItem) return; if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty)) { - SeparatorProperty.Changed.AddClassHandler((o, e) => + if (GetSeparatorInstance(Separator) is { } a) { - breadcrumbItem.Separator = e.NewValue.Value switch - { - string s => s, - ITemplate t => t.Build(), - _ => e.NewValue.Value?.ToString() - }; + breadcrumbItem.Separator = a; + } + SeparatorProperty.Changed.AddClassHandler((_, args) => + { + if (GetSeparatorInstance(args.NewValue.Value) is { } b) + breadcrumbItem.Separator = b; }); } - bool b = breadcrumbItem.IsSet(BreadcrumbItem.IconProperty); - if(!breadcrumbItem.IsSet(BreadcrumbItem.IconProperty) && IconBinding != null) + if (!breadcrumbItem.IsSet(BreadcrumbItem.IconProperty) && IconBinding != null) { breadcrumbItem[!BreadcrumbItem.IconProperty] = IconBinding; } + if (!breadcrumbItem.IsSet(BreadcrumbItem.CommandProperty) && CommandBinding != null) + { + breadcrumbItem[!BreadcrumbItem.CommandProperty] = CommandBinding; + } + if (!breadcrumbItem.IsSet(BreadcrumbItem.IconTemplateProperty) && IconTemplate != null) + { + breadcrumbItem.IconTemplate = IconTemplate; + } } + + private static object? GetSeparatorInstance(object? separator) => separator switch + { + null => null, + string s => s, + ITemplate t => t.Build(), + _ => separator.ToString() + }; } \ No newline at end of file diff --git a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs index abbaf50..c6c38f9 100644 --- a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs +++ b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs @@ -9,7 +9,7 @@ public class BreadcrumbItem: ContentControl { public static readonly StyledProperty SeparatorProperty = AvaloniaProperty.Register( - nameof(Separator), "/"); + nameof(Separator)); public object? Separator {