From fdc6b2e156682588a1ad7a4886f0b863b390df96 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Tue, 5 Mar 2024 16:47:33 +0800 Subject: [PATCH] feat: introduce Small class and IsReadOnly property. --- demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml | 12 +++ .../Controls/Breadcrumb.axaml | 91 +++++++++++++++---- src/Ursa.Themes.Semi/Styles/Breadcrumb.axaml | 20 ++++ src/Ursa.Themes.Semi/Styles/_index.axaml | 1 + src/Ursa/Controls/BackTop/BackTop.cs | 15 +++ src/Ursa/Controls/Breadcrumb/Breadcrumb.cs | 9 ++ .../Controls/Breadcrumb/BreadcrumbItem.cs | 7 +- 7 files changed, 138 insertions(+), 17 deletions(-) create mode 100644 src/Ursa.Themes.Semi/Styles/Breadcrumb.axaml create mode 100644 src/Ursa/Controls/BackTop/BackTop.cs diff --git a/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml index 0e44740..0df146e 100644 --- a/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml +++ b/demo/Ursa.Demo/Pages/BreadcrumbDemo.axaml @@ -23,6 +23,18 @@ + + + + + + + + + + + + + - + - + ContentTemplate="{TemplateBinding ContentTemplate}" + Foreground="{DynamicResource SemiColorText2}" + IsVisible="{TemplateBinding Content, + Converter={x:Static ObjectConverters.IsNotNull}}" /> + - + @@ -55,30 +63,81 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ursa.Themes.Semi/Styles/Breadcrumb.axaml b/src/Ursa.Themes.Semi/Styles/Breadcrumb.axaml new file mode 100644 index 0000000..997942a --- /dev/null +++ b/src/Ursa.Themes.Semi/Styles/Breadcrumb.axaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/src/Ursa.Themes.Semi/Styles/_index.axaml b/src/Ursa.Themes.Semi/Styles/_index.axaml index e3cc666..baa0d9b 100644 --- a/src/Ursa.Themes.Semi/Styles/_index.axaml +++ b/src/Ursa.Themes.Semi/Styles/_index.axaml @@ -4,6 +4,7 @@ + diff --git a/src/Ursa/Controls/BackTop/BackTop.cs b/src/Ursa/Controls/BackTop/BackTop.cs new file mode 100644 index 0000000..3506807 --- /dev/null +++ b/src/Ursa/Controls/BackTop/BackTop.cs @@ -0,0 +1,15 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Media; + +namespace Ursa.Controls.BackTop; + +public class BackTop: Control +{ + public static readonly AttachedProperty AttachProperty = + AvaloniaProperty.RegisterAttached("Attach"); + + public static void SetAttach(Control obj, bool value) => obj.SetValue(AttachProperty, value); + public static bool GetAttach(Control obj) => obj.GetValue(AttachProperty); +} \ No newline at end of file diff --git a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs index 4818d40..b54a5ec 100644 --- a/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs +++ b/src/Ursa/Controls/Breadcrumb/Breadcrumb.cs @@ -56,6 +56,15 @@ public class Breadcrumb: ItemsControl get => GetValue(IconTemplateProperty); set => SetValue(IconTemplateProperty, value); } + + public static readonly StyledProperty IsReadOnlyProperty = AvaloniaProperty.Register( + nameof(IsReadOnly)); + + public bool IsReadOnly + { + get => GetValue(IsReadOnlyProperty); + set => SetValue(IsReadOnlyProperty, value); + } static Breadcrumb() { diff --git a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs index 44fad5f..35aa6e1 100644 --- a/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs +++ b/src/Ursa/Controls/Breadcrumb/BreadcrumbItem.cs @@ -4,6 +4,7 @@ using Avalonia.Controls; using Avalonia.Controls.Metadata; using Avalonia.Controls.Templates; using Avalonia.Input; +using Avalonia.LogicalTree; namespace Ursa.Controls; @@ -51,6 +52,10 @@ public class BreadcrumbItem: ContentControl protected override void OnPointerPressed(PointerPressedEventArgs e) { base.OnPointerPressed(e); - Command?.Execute(null); + var parent = this.FindLogicalAncestorOfType(); + if (parent?.IsReadOnly != true) + { + Command?.Execute(null); + } } } \ No newline at end of file