From a38bac67449ea5f08cc660c190425cc3932287f6 Mon Sep 17 00:00:00 2001 From: chinboy Date: Mon, 10 Feb 2025 11:39:08 +0800 Subject: [PATCH] Refactor Popup --- src/AtomUI.Controls/Flyouts/Flyout.cs | 5 +++-- src/AtomUI.Controls/Flyouts/FlyoutHost.cs | 16 ++++++++++------ src/AtomUI.Controls/Popup/Popup.cs | 11 ++--------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/AtomUI.Controls/Flyouts/Flyout.cs b/src/AtomUI.Controls/Flyouts/Flyout.cs index 4a47cb079..06dea6503 100644 --- a/src/AtomUI.Controls/Flyouts/Flyout.cs +++ b/src/AtomUI.Controls/Flyouts/Flyout.cs @@ -7,6 +7,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives.PopupPositioning; using Avalonia.Layout; +using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Metadata; using Avalonia.Styling; @@ -127,9 +128,9 @@ public class Flyout : PopupFlyoutBase public Flyout() { - TokenResourceBinder.CreateTokenBinding(this, MotionDurationTokenProperty, + TokenResourceBinder.CreateGlobalTokenBinding(this, MotionDurationTokenProperty, SharedTokenKey.MotionDurationMid); - TokenResourceBinder.CreateTokenBinding(this, MaskShadowsProperty, + TokenResourceBinder.CreateGlobalTokenBinding(this, MaskShadowsProperty, SharedTokenKey.BoxShadowsSecondary); } diff --git a/src/AtomUI.Controls/Flyouts/FlyoutHost.cs b/src/AtomUI.Controls/Flyouts/FlyoutHost.cs index 54704744a..57ec10273 100644 --- a/src/AtomUI.Controls/Flyouts/FlyoutHost.cs +++ b/src/AtomUI.Controls/Flyouts/FlyoutHost.cs @@ -155,16 +155,20 @@ public class FlyoutHost : Control _flyoutStateHelper = new FlyoutStateHelper(); } - public override void ApplyTemplate() - { - base.ApplyTemplate(); - TokenResourceBinder.CreateTokenBinding(this, MarginToAnchorProperty, SharedTokenKey.MarginXXS); - SetupFlyoutProperties(); - } + // public override void ApplyTemplate() + // { + // // TODO 需要审查到底是否合适 + // base.ApplyTemplate(); + // TokenResourceBinder.CreateTokenBinding(this, MarginToAnchorProperty, SharedTokenKey.MarginXXS); + // SetupFlyoutProperties(); + // } protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) { base.OnAttachedToLogicalTree(e); + TokenResourceBinder.CreateTokenBinding(this, MarginToAnchorProperty, SharedTokenKey.MarginXXS); + SetupFlyoutProperties(); + BindUtils.RelayBind(this, AnchorTargetProperty, _flyoutStateHelper, FlyoutStateHelper.AnchorTargetProperty); BindUtils.RelayBind(this, FlyoutProperty, _flyoutStateHelper, FlyoutStateHelper.FlyoutProperty); BindUtils.RelayBind(this, MouseEnterDelayProperty, _flyoutStateHelper, diff --git a/src/AtomUI.Controls/Popup/Popup.cs b/src/AtomUI.Controls/Popup/Popup.cs index 8d2a8dde7..8fe02268d 100644 --- a/src/AtomUI.Controls/Popup/Popup.cs +++ b/src/AtomUI.Controls/Popup/Popup.cs @@ -75,7 +75,6 @@ public class Popup : AvaloniaPopup private PopupShadowLayer? _shadowLayer; private CompositeDisposable? _compositeDisposable; private IDisposable? _selfLightDismissDisposable; - private bool _initialized; private ManagedPopupPositionerInfo? _managedPopupPositioner; private bool _isNeedFlip = true; private bool _openAnimating; @@ -102,14 +101,8 @@ public class Popup : AvaloniaPopup protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) { base.OnAttachedToLogicalTree(e); - if (!_initialized) - { - TokenResourceBinder.CreateTokenBinding(this, MaskShadowsProperty, - SharedTokenKey.BoxShadowsSecondary); - TokenResourceBinder.CreateTokenBinding(this, MotionDurationProperty, - SharedTokenKey.MotionDurationMid); - _initialized = true; - } + TokenResourceBinder.CreateTokenBinding(this, MaskShadowsProperty, SharedTokenKey.BoxShadowsSecondary); + TokenResourceBinder.CreateTokenBinding(this, MotionDurationProperty, SharedTokenKey.MotionDurationMid); } protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e)