diff --git a/demo/Ursa.Demo/Models/MenuKeys.cs b/demo/Ursa.Demo/Models/MenuKeys.cs index 085be94..b7b1a76 100644 --- a/demo/Ursa.Demo/Models/MenuKeys.cs +++ b/demo/Ursa.Demo/Models/MenuKeys.cs @@ -6,6 +6,7 @@ public static class MenuKeys public const string MenuKeyBadge = "Badge"; public const string MenuKeyBanner = "Banner"; public const string MenuKeyButtonGroup = "ButtonGroup"; + public const string MenuKeyBreadcrumb = "Breadcrumb"; public const string MenuKeyClassInput = "Class Input"; public const string MenuKeyDialog = "Dialog"; public const string MenuKeyDivider = "Divider"; diff --git a/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml new file mode 100644 index 0000000..ac75e8b --- /dev/null +++ b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml.cs b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml.cs new file mode 100644 index 0000000..c119fc7 --- /dev/null +++ b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Ursa.Demo.Pages; + +public partial class BreadcrumbDemo : UserControl +{ + public BreadcrumbDemo() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs new file mode 100644 index 0000000..92f716a --- /dev/null +++ b/demo/Ursa.Demo/ViewModels/BreadcrumbDemoViewModel.cs @@ -0,0 +1,8 @@ +using CommunityToolkit.Mvvm.ComponentModel; + +namespace Ursa.Demo.ViewModels; + +public class BreadcrumbDemoViewModel: ObservableObject +{ + +} \ No newline at end of file diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs index 8cc13e6..d987128 100644 --- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs @@ -28,6 +28,7 @@ public class MainViewViewModel : ViewModelBase MenuKeys.MenuKeyBadge => new BadgeDemoViewModel(), MenuKeys.MenuKeyBanner => new BannerDemoViewModel(), MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(), + MenuKeys.MenuKeyBreadcrumb => new BreadcrumbDemoViewModel(), MenuKeys.MenuKeyClassInput => new ClassInputDemoViewModel(), MenuKeys.MenuKeyDialog => new DialogDemoViewModel(), MenuKeys.MenuKeyDivider => new DividerDemoViewModel(), diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs index a25e8d1..a4eaa14 100644 --- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs @@ -14,6 +14,7 @@ public class MenuViewModel: ViewModelBase new() { MenuHeader = "Controls", IsSeparator = true }, new() { MenuHeader = "Badge", Key = MenuKeys.MenuKeyBadge, Status = "Updated"}, new() { MenuHeader = "Banner", Key = MenuKeys.MenuKeyBanner }, + new() { MenuHeader = "Breadcrumb", Key = MenuKeys.MenuKeyBreadcrumb, Status = "New" }, new() { MenuHeader = "Button Group", Key = MenuKeys.MenuKeyButtonGroup}, new() { MenuHeader = "Class Input", Key = MenuKeys.MenuKeyClassInput, Status = "New" }, new() { MenuHeader = "Dialog", Key = MenuKeys.MenuKeyDialog, Status = "Updated"}, diff --git a/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml b/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml new file mode 100644 index 0000000..68719e0 --- /dev/null +++ b/src/Ursa.Themes.Semi/Controls/Breadcrumb.axaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml index 21d3909..6be2414 100644 --- a/src/Ursa.Themes.Semi/Controls/_index.axaml +++ b/src/Ursa.Themes.Semi/Controls/_index.axaml @@ -4,6 +4,7 @@ + diff --git a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs index d2ab31c..384c364 100644 --- a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs +++ b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs @@ -4,6 +4,7 @@ using Avalonia.Controls.Templates; using Avalonia.Data; using Avalonia.Layout; using Avalonia.Metadata; +using Irihi.Avalonia.Shared.Helpers; namespace Ursa.Controls; @@ -47,6 +48,15 @@ public class Breadcrumb: ItemsControl get => GetValue(SeparatorProperty); set => SetValue(SeparatorProperty, value); } + + public static readonly StyledProperty IconTemplateProperty = AvaloniaProperty.Register( + nameof(IconTemplate)); + + public IDataTemplate? IconTemplate + { + get => GetValue(IconTemplateProperty); + set => SetValue(IconTemplateProperty, value); + } static Breadcrumb() { @@ -66,20 +76,23 @@ public class Breadcrumb: ItemsControl protected override void PrepareContainerForItemOverride(Control container, object? item, int index) { base.PrepareContainerForItemOverride(container, item, index); - if (container is BreadcrumbItem breadcrumbItem) + if (container is not BreadcrumbItem breadcrumbItem) return; + if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty)) { - if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty)) + SeparatorProperty.Changed.AddClassHandler((o, e) => { - SeparatorProperty.Changed.AddClassHandler((o, e) => + breadcrumbItem.Separator = e.NewValue.Value switch { - breadcrumbItem.Separator = e.NewValue.Value switch - { - string s => s, - ITemplate t => t.Build(), - _ => e.NewValue.Value?.ToString() - }; - }); - } + string s => s, + ITemplate t => t.Build(), + _ => e.NewValue.Value?.ToString() + }; + }); + } + bool b = breadcrumbItem.IsSet(BreadcrumbItem.IconProperty); + if(!breadcrumbItem.IsSet(BreadcrumbItem.IconProperty) && IconBinding != null) + { + breadcrumbItem[!BreadcrumbItem.IconProperty] = IconBinding; } } } \ No newline at end of file diff --git a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs index 1de6be1..abbaf50 100644 --- a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs +++ b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs @@ -1,6 +1,7 @@ using System.Windows.Input; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Templates; namespace Ursa.Controls; @@ -34,6 +35,15 @@ public class BreadcrumbItem: ContentControl set => SetValue(CommandProperty, value); } + public static readonly StyledProperty IconTemplateProperty = AvaloniaProperty.Register( + nameof(IconTemplate)); + + public IDataTemplate? IconTemplate + { + get => GetValue(IconTemplateProperty); + set => SetValue(IconTemplateProperty, value); + } + static BreadcrumbItem() {