From e4ff70ad14234e104b01655e6c654155d7318fa0 Mon Sep 17 00:00:00 2001 From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com> Date: Fri, 4 Aug 2023 22:55:09 +0800 Subject: [PATCH] feat: Badge inherits HeaderedContentControl. --- demo/Ursa.Demo/Pages/BadgeDemo.axaml | 98 +++++++++++------------ src/Ursa.Themes.Semi/Controls/Badge.axaml | 8 +- src/Ursa/Controls/Badge.cs | 25 ++---- 3 files changed, 58 insertions(+), 73 deletions(-) diff --git a/demo/Ursa.Demo/Pages/BadgeDemo.axaml b/demo/Ursa.Demo/Pages/BadgeDemo.axaml index ce4e062..5d2f3d0 100644 --- a/demo/Ursa.Demo/Pages/BadgeDemo.axaml +++ b/demo/Ursa.Demo/Pages/BadgeDemo.axaml @@ -27,152 +27,152 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -180,37 +180,37 @@ @@ -219,37 +219,37 @@ diff --git a/src/Ursa.Themes.Semi/Controls/Badge.axaml b/src/Ursa.Themes.Semi/Controls/Badge.axaml index 2dc94dd..9dd320d 100644 --- a/src/Ursa.Themes.Semi/Controls/Badge.axaml +++ b/src/Ursa.Themes.Semi/Controls/Badge.axaml @@ -45,12 +45,12 @@ BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}" - IsVisible="{Binding !!BadgeContent, RelativeSource={RelativeSource TemplatedParent}}" + IsVisible="{Binding !!Header, RelativeSource={RelativeSource TemplatedParent}}" RenderTransformOrigin=".5,.5" Theme="{TemplateBinding BadgeTheme}" UseLayoutRounding="False"> - + @@ -93,7 +93,7 @@ BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}" - IsVisible="{Binding !!BadgeContent, RelativeSource={RelativeSource TemplatedParent}}" + IsVisible="{Binding !!Header, RelativeSource={RelativeSource TemplatedParent}}" RenderTransformOrigin=".5,.5" /> diff --git a/src/Ursa/Controls/Badge.cs b/src/Ursa/Controls/Badge.cs index 9956352..3e24381 100644 --- a/src/Ursa/Controls/Badge.cs +++ b/src/Ursa/Controls/Badge.cs @@ -1,7 +1,6 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Metadata; -using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Interactivity; using Avalonia.Media; @@ -10,18 +9,14 @@ using Ursa.Common; namespace Ursa.Controls; -[TemplatePart(PART_ContentPresenter, typeof(ContentPresenter))] [TemplatePart(PART_BadgeContainer, typeof(Border))] -[TemplatePart(PART_BadgeContentPresenter, typeof(ContentPresenter))] -public class Badge: ContentControl +public class Badge: HeaderedContentControl { public const string PART_ContentPresenter = "PART_ContentPresenter"; public const string PART_BadgeContainer = "PART_BadgeContainer"; - public const string PART_BadgeContentPresenter = "PART_BadgeContentPresenter"; - - private ContentPresenter? _content; + public const string PART_HeaderPresenter = "PART_HeaderPresenter"; + private Border? _badgeContainer; - private ContentPresenter? _badgeContent; public static readonly StyledProperty BadgeThemeProperty = AvaloniaProperty.Register( nameof(BadgeTheme)); @@ -39,14 +34,6 @@ public class Badge: ContentControl set => SetValue(DotProperty, value); } - public static readonly StyledProperty BadgeContentProperty = AvaloniaProperty.Register( - nameof(BadgeContent)); - public object? BadgeContent - { - get => GetValue(BadgeContentProperty); - set => SetValue(BadgeContentProperty, value); - } - public static readonly StyledProperty CornerPositionProperty = AvaloniaProperty.Register( nameof(CornerPosition)); public CornerPosition CornerPosition @@ -65,15 +52,13 @@ public class Badge: ContentControl static Badge() { - BadgeContentProperty.Changed.AddClassHandler((badge, args) => badge.UpdateBadgePosition()); + HeaderProperty.Changed.AddClassHandler((badge, args) => badge.UpdateBadgePosition()); } protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - _content = e.NameScope.Find(PART_ContentPresenter); _badgeContainer = e.NameScope.Find(PART_BadgeContainer); - _badgeContent = e.NameScope.Find(PART_BadgeContentPresenter); } protected override void OnLoaded(RoutedEventArgs e) @@ -92,7 +77,7 @@ public class Badge: ContentControl { var vertical = CornerPosition is CornerPosition.BottomLeft or CornerPosition.BottomRight ? 1 : -1; var horizontal = CornerPosition is CornerPosition.TopRight or CornerPosition.BottomRight ? 1 : -1; - if (_badgeContainer is not null && _content?.Child is not null) + if (_badgeContainer is not null && base.Presenter?.Child is not null) { _badgeContainer.RenderTransform = new TransformGroup() {