diff --git a/resources/images/readme/AtomUIOSS.png b/resources/images/readme/AtomUIOSS.png index 7a2aab62d..f3695b76d 100644 Binary files a/resources/images/readme/AtomUIOSS.png and b/resources/images/readme/AtomUIOSS.png differ diff --git a/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs b/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs index 0bcf8a405..0e45c87d5 100644 --- a/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs +++ b/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs @@ -52,25 +52,20 @@ internal class DotBadgeIndicator : Control, AffectsRender(BadgeDotColorProperty, BadgeShadowSizeProperty); } - public sealed override void ApplyTemplate() + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { - base.ApplyTemplate(); - BuildBoxShadow(); - } - - protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnAttachedToLogicalTree(e); + base.OnAttachedToVisualTree(e); _resourceBindingsDisposable = new CompositeDisposable(); this.AddResourceBindingDisposable( TokenResourceBinder.CreateTokenBinding(this, BadgeShadowSizeProperty, BadgeTokenKey.BadgeShadowSize)); this.AddResourceBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, BadgeShadowColorProperty, BadgeTokenKey.BadgeShadowColor)); + BuildBoxShadow(); } - protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) + protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) { - base.OnDetachedFromLogicalTree(e); + base.OnDetachedFromVisualTree(e); this.DisposeTokenBindings(); } diff --git a/src/AtomUI.Controls/Badge/RibbonBadgeAdorner.cs b/src/AtomUI.Controls/Badge/RibbonBadgeAdorner.cs index 3402dbd8f..7e371cbfb 100644 --- a/src/AtomUI.Controls/Badge/RibbonBadgeAdorner.cs +++ b/src/AtomUI.Controls/Badge/RibbonBadgeAdorner.cs @@ -139,6 +139,7 @@ internal class RibbonBadgeAdorner : Control private void BuildStyles() { + // TODO 需要优化 var commonStyle = new Style(selector => selector.OfType()); commonStyle.Add(RibbonColorProperty, SharedTokenKey.ColorPrimary); commonStyle.Add(CornerRadiusProperty, SharedTokenKey.BorderRadiusSM); diff --git a/src/AtomUI.Controls/Flyouts/FlyoutHost.cs b/src/AtomUI.Controls/Flyouts/FlyoutHost.cs index d684d1dca..12f29b83e 100644 --- a/src/AtomUI.Controls/Flyouts/FlyoutHost.cs +++ b/src/AtomUI.Controls/Flyouts/FlyoutHost.cs @@ -179,21 +179,10 @@ public class FlyoutHost : Control, this.BindMotionProperties(); } - protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnAttachedToLogicalTree(e); - _resourceBindingsDisposable = new CompositeDisposable(); - } - - protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnDetachedFromLogicalTree(e); - this.DisposeTokenBindings(); - } - protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); + _resourceBindingsDisposable = new CompositeDisposable(); BindUtils.RelayBind(this, AnchorTargetProperty, _flyoutStateHelper, FlyoutStateHelper.AnchorTargetProperty); BindUtils.RelayBind(this, FlyoutProperty, _flyoutStateHelper, FlyoutStateHelper.FlyoutProperty); BindUtils.RelayBind(this, MouseEnterDelayProperty, _flyoutStateHelper, @@ -210,6 +199,7 @@ public class FlyoutHost : Control, { base.OnDetachedFromVisualTree(e); _flyoutStateHelper.NotifyDetachedFromVisualTree(); + this.DisposeTokenBindings(); } protected virtual void SetupFlyoutProperties() diff --git a/src/AtomUI.Controls/MarqueeLabel/MarqueeLabel.cs b/src/AtomUI.Controls/MarqueeLabel/MarqueeLabel.cs index ed0c508b6..b5f80e753 100644 --- a/src/AtomUI.Controls/MarqueeLabel/MarqueeLabel.cs +++ b/src/AtomUI.Controls/MarqueeLabel/MarqueeLabel.cs @@ -79,6 +79,7 @@ public class MarqueeLabel : TextBlock, public MarqueeLabel() { this.RegisterResources(); + HorizontalAlignment = HorizontalAlignment.Stretch; } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) @@ -134,7 +135,7 @@ public class MarqueeLabel : TextBlock, { base.ApplyTemplate(); // 为了强制 - HorizontalAlignment = HorizontalAlignment.Stretch; + } protected override Size MeasureOverride(Size availableSize) diff --git a/src/AtomUI.Controls/PopupConfirm/PopupConfirm.cs b/src/AtomUI.Controls/PopupConfirm/PopupConfirm.cs index 5a6637bca..886295b9a 100644 --- a/src/AtomUI.Controls/PopupConfirm/PopupConfirm.cs +++ b/src/AtomUI.Controls/PopupConfirm/PopupConfirm.cs @@ -1,5 +1,4 @@ -using System.Reactive.Disposables; -using AtomUI.Controls.PopupConfirmLang; +using AtomUI.Controls.PopupConfirmLang; using AtomUI.IconPkg; using AtomUI.Theme; using AtomUI.Theme.Data; @@ -8,7 +7,6 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Templates; using Avalonia.Interactivity; -using Avalonia.LogicalTree; namespace AtomUI.Controls; @@ -20,8 +18,7 @@ public enum PopupConfirmStatus } public class PopupConfirm : FlyoutHost, - IControlSharedTokenResourcesHost, - IResourceBindingManager + IControlSharedTokenResourcesHost { #region 公共属性属性 @@ -140,37 +137,21 @@ public class PopupConfirm : FlyoutHost, Control IControlSharedTokenResourcesHost.HostControl => this; string IControlSharedTokenResourcesHost.TokenId => PopupConfirmToken.ID; - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; #endregion - - private CompositeDisposable? _resourceBindingsDisposable; public PopupConfirm() { this.RegisterResources(); } - public sealed override void ApplyTemplate() + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { - Flyout ??= new PopupConfirmFlyout(this); + base.OnAttachedToVisualTree(e); + Flyout ??= new PopupConfirmFlyout(this); this.AddResourceBindingDisposable(LanguageResourceBinder.CreateBinding(this, OkTextProperty, PopupConfirmLangResourceKey.OkText)); this.AddResourceBindingDisposable(LanguageResourceBinder.CreateBinding(this, CancelTextProperty, PopupConfirmLangResourceKey.CancelText)); - base.ApplyTemplate(); } - - protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnAttachedToLogicalTree(e); - _resourceBindingsDisposable = new CompositeDisposable(); - } - - protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnDetachedFromLogicalTree(e); - this.DisposeTokenBindings(); - } - } public class PopupConfirmClickEventArgs : RoutedEventArgs diff --git a/src/AtomUI.Controls/Primitives/ShadowRenderer.cs b/src/AtomUI.Controls/Primitives/ShadowRenderer.cs index 4b945c815..39e8fc694 100644 --- a/src/AtomUI.Controls/Primitives/ShadowRenderer.cs +++ b/src/AtomUI.Controls/Primitives/ShadowRenderer.cs @@ -52,9 +52,16 @@ internal class ShadowRenderer : Control MaskContentBackgroundProperty.OverrideDefaultValue(new SolidColorBrush(Colors.Transparent)); } - public sealed override void ApplyTemplate() + public ShadowRenderer() { - base.ApplyTemplate(); + HorizontalAlignment = HorizontalAlignment.Stretch; + VerticalAlignment = VerticalAlignment.Stretch; + IsHitTestVisible = false; + } + + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) + { + base.OnAttachedToVisualTree(e); if (_layout is not null) { return; @@ -68,14 +75,6 @@ internal class ShadowRenderer : Control _layout.Children.Add(_maskContent); } - protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) - { - base.OnAttachedToVisualTree(e); - HorizontalAlignment = HorizontalAlignment.Stretch; - VerticalAlignment = VerticalAlignment.Stretch; - IsHitTestVisible = false; - } - private Border CreateMaskContent() { var maskContent = new Border diff --git a/src/AtomUI.IconPkg/Icon.cs b/src/AtomUI.IconPkg/Icon.cs index f1e9f0b2d..831d565e4 100644 --- a/src/AtomUI.IconPkg/Icon.cs +++ b/src/AtomUI.IconPkg/Icon.cs @@ -197,14 +197,6 @@ public class Icon : Control, this.BindMotionProperties(); } - public override void ApplyTemplate() - { - base.ApplyTemplate(); - BuildSourceRenderData(); - SetupFilledBrush(); - ConfigureTransitions(); - } - private void ConfigureTransitions() { if (IsMotionEnabled) @@ -440,6 +432,9 @@ public class Icon : Control, _animationCancellationTokenSource = new CancellationTokenSource(); _animation.RunAsync(this, _animationCancellationTokenSource.Token); } + BuildSourceRenderData(); + SetupFilledBrush(); + ConfigureTransitions(); } protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)