From c21a1d159d6c907825ba8f20919ce3b73e4d22a0 Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Tue, 20 May 2025 20:26:19 +0800 Subject: [PATCH] feat: relax template part. --- src/Ursa/Controls/Badge/Badge.cs | 73 ++++++++++++++++---------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/src/Ursa/Controls/Badge/Badge.cs b/src/Ursa/Controls/Badge/Badge.cs index fe3f26e..5a583ee 100644 --- a/src/Ursa/Controls/Badge/Badge.cs +++ b/src/Ursa/Controls/Badge/Badge.cs @@ -8,59 +8,29 @@ using Ursa.Common; namespace Ursa.Controls; -[TemplatePart(PART_BadgeContainer, typeof(Border))] +[TemplatePart(PART_BadgeContainer, typeof(Control))] public class Badge : HeaderedContentControl { public const string PART_ContentPresenter = "PART_ContentPresenter"; public const string PART_BadgeContainer = "PART_BadgeContainer"; public const string PART_HeaderPresenter = "PART_HeaderPresenter"; - private Border? _badgeContainer; - public static readonly StyledProperty BadgeThemeProperty = AvaloniaProperty.Register(nameof(BadgeTheme)); - public ControlTheme BadgeTheme - { - get => GetValue(BadgeThemeProperty); - set => SetValue(BadgeThemeProperty, value); - } - public static readonly StyledProperty DotProperty = AvaloniaProperty.Register(nameof(Dot)); - public bool Dot - { - get => GetValue(DotProperty); - set => SetValue(DotProperty, value); - } - public static readonly StyledProperty CornerPositionProperty = AvaloniaProperty.Register(nameof(CornerPosition)); - public CornerPosition CornerPosition - { - get => GetValue(CornerPositionProperty); - set => SetValue(CornerPositionProperty, value); - } - public static readonly StyledProperty OverflowCountProperty = AvaloniaProperty.Register(nameof(OverflowCount)); - public int OverflowCount - { - get => GetValue(OverflowCountProperty); - set => SetValue(OverflowCountProperty, value); - } - public static readonly StyledProperty BadgeFontSizeProperty = AvaloniaProperty.Register(nameof(BadgeFontSize)); - public double BadgeFontSize - { - get => GetValue(BadgeFontSizeProperty); - set => SetValue(BadgeFontSizeProperty, value); - } + private Control? _badgeContainer; static Badge() { @@ -68,22 +38,54 @@ public class Badge : HeaderedContentControl DotProperty.Changed.AddClassHandler((badge, _) => badge.UpdateBadgePosition()); } + public ControlTheme BadgeTheme + { + get => GetValue(BadgeThemeProperty); + set => SetValue(BadgeThemeProperty, value); + } + + public bool Dot + { + get => GetValue(DotProperty); + set => SetValue(DotProperty, value); + } + + public CornerPosition CornerPosition + { + get => GetValue(CornerPositionProperty); + set => SetValue(CornerPositionProperty, value); + } + + public int OverflowCount + { + get => GetValue(OverflowCountProperty); + set => SetValue(OverflowCountProperty, value); + } + + public double BadgeFontSize + { + get => GetValue(BadgeFontSizeProperty); + set => SetValue(BadgeFontSizeProperty, value); + } + protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { _badgeContainer?.RemoveHandler(SizeChangedEvent, OnBadgeSizeChanged); base.OnApplyTemplate(e); - _badgeContainer = e.NameScope.Find(PART_BadgeContainer); + _badgeContainer = e.NameScope.Find(PART_BadgeContainer); _badgeContainer?.AddHandler(SizeChangedEvent, OnBadgeSizeChanged); } - private void OnBadgeSizeChanged(object? sender, SizeChangedEventArgs e) => UpdateBadgePosition(); + private void OnBadgeSizeChanged(object? sender, SizeChangedEventArgs e) + { + UpdateBadgePosition(); + } private void UpdateBadgePosition() { 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 && Presenter?.Child is not null) - { _badgeContainer.RenderTransform = new TransformGroup { Children = @@ -93,6 +95,5 @@ public class Badge : HeaderedContentControl vertical * _badgeContainer.Bounds.Height / 2) ] }; - } } } \ No newline at end of file