diff --git a/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBox.cs b/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBox.cs index b1ce04610..c96a30fd5 100644 --- a/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBox.cs +++ b/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBox.cs @@ -1,23 +1,17 @@ -using System.Reactive.Disposables; -using AtomUI.Controls.Utils; +using AtomUI.Controls.Utils; using AtomUI.Data; -using AtomUI.Theme; -using AtomUI.Theme.Data; -using AtomUI.Theme.Styling; using AtomUI.Theme.Utils; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Metadata; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; -using Avalonia.LogicalTree; namespace AtomUI.Controls; [TemplatePart(AddOnDecoratedInnerBoxTheme.ContentPresenterPart, typeof(ContentPresenter), IsRequired = true)] public class AddOnDecoratedInnerBox : ContentControl, - IAnimationAwareControl, - ITokenResourceConsumer + IAnimationAwareControl { #region 公共属性定义 @@ -110,7 +104,7 @@ public class AddOnDecoratedInnerBox : ContentControl, o => o.ContentPresenterMargin, (o, v) => o.ContentPresenterMargin = v); - private static readonly DirectProperty MarginXSTokenProperty = + internal static readonly DirectProperty MarginXSTokenProperty = AvaloniaProperty.RegisterDirect(nameof(MarginXSToken), o => o.MarginXSToken, (o, v) => o.MarginXSToken = v); @@ -146,14 +140,12 @@ public class AddOnDecoratedInnerBox : ContentControl, } Control IAnimationAwareControl.PropertyBindTarget => this; - CompositeDisposable? ITokenResourceConsumer.TokenBindingsDisposable => _tokenBindingsDisposable; #endregion private StackPanel? _leftAddOnLayout; private StackPanel? _rightAddOnLayout; private IconButton? _clearButton; - private CompositeDisposable? _tokenBindingsDisposable; public AddOnDecoratedInnerBox() { @@ -188,20 +180,6 @@ public class AddOnDecoratedInnerBox : ContentControl, } } - protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnAttachedToLogicalTree(e); - _tokenBindingsDisposable = new CompositeDisposable(); - this.AddTokenBindingDisposable( - TokenResourceBinder.CreateTokenBinding(this, MarginXSTokenProperty, SharedTokenKey.MarginXS)); - } - - protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnDetachedFromLogicalTree(e); - this.DisposeTokenBindings(); - } - protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); diff --git a/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBoxTheme.cs b/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBoxTheme.cs index 2bb1f1539..c1ff4a48f 100644 --- a/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBoxTheme.cs +++ b/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedInnerBoxTheme.cs @@ -218,7 +218,7 @@ internal class AddOnDecoratedInnerBoxTheme : BaseControlTheme private void BuildCommonStyle() { var commonStyle = new Style(selector => selector.Nesting()); - + commonStyle.Add(AddOnDecoratedInnerBox.MarginXSTokenProperty, SharedTokenKey.MarginXS); { var decoratorStyle = new Style(selector => selector.Nesting().Template().Name(InnerBoxDecoratorPart)); decoratorStyle.Add(Visual.ZIndexProperty, AddOnDecoratedBoxTheme.NormalZIndex); diff --git a/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs b/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs index a7e5cb90e..3ccd145bd 100644 --- a/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs +++ b/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs @@ -1,4 +1,5 @@ -using AtomUI.Theme; +using System.Reactive.Disposables; +using AtomUI.Theme; using AtomUI.Theme.Data; using AtomUI.Theme.Styling; using Avalonia; @@ -15,7 +16,8 @@ namespace AtomUI.Controls; [TemplatePart(ButtonSpinnerInnerBoxTheme.SpinnerHandlePart, typeof(ContentPresenter))] internal class ButtonSpinnerInnerBox : AddOnDecoratedInnerBox, - ICustomHitTest + ICustomHitTest, + ITokenResourceConsumer { #region 公共属性定义 @@ -96,9 +98,12 @@ internal class ButtonSpinnerInnerBox : AddOnDecoratedInnerBox, get => _spinnerHandleWidthToken; set => SetAndRaise(SpinnerHandleWidthTokenProperty, ref _spinnerHandleWidthToken, value); } + + CompositeDisposable? ITokenResourceConsumer.TokenBindingsDisposable => _tokenBindingsDisposable; #endregion - + + private CompositeDisposable? _tokenBindingsDisposable; private ContentPresenter? _handleContentPresenter; protected override void BuildEffectiveInnerBoxPadding() @@ -139,10 +144,13 @@ internal class ButtonSpinnerInnerBox : AddOnDecoratedInnerBox, protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) { base.OnAttachedToLogicalTree(e); - this.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, SpinnerBorderBrushProperty, - SharedTokenKey.ColorBorder)); - this.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, SpinnerHandleWidthTokenProperty, - ButtonSpinnerTokenKey.HandleWidth)); + _tokenBindingsDisposable = new CompositeDisposable(); + } + + protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) + { + base.OnDetachedFromLogicalTree(e); + this.DisposeTokenBindings(); } protected override void OnApplyTemplate(TemplateAppliedEventArgs e) diff --git a/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBoxTheme.cs b/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBoxTheme.cs index f03cceef6..0ef98f359 100644 --- a/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBoxTheme.cs +++ b/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBoxTheme.cs @@ -41,6 +41,8 @@ internal class ButtonSpinnerInnerBoxTheme : AddOnDecoratedInnerBoxTheme base.BuildStyles(); var commonStyle = new Style(selector => selector.Nesting()); + commonStyle.Add(ButtonSpinnerInnerBox.SpinnerBorderBrushProperty, SharedTokenKey.ColorBorder); + commonStyle.Add(ButtonSpinnerInnerBox.SpinnerHandleWidthTokenProperty, ButtonSpinnerTokenKey.HandleWidth); // spinner 的位置 var leftPositionStyle = new Style(selector => diff --git a/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBox.cs b/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBox.cs index 9e879e960..3436d331a 100644 --- a/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBox.cs +++ b/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBox.cs @@ -1,10 +1,6 @@ -using AtomUI.Theme; -using AtomUI.Theme.Data; -using AtomUI.Theme.Styling; -using Avalonia; +using Avalonia; using Avalonia.Controls.Metadata; using Avalonia.Controls.Presenters; -using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Rendering; @@ -81,13 +77,4 @@ internal class ComboBoxSpinnerInnerBox : AddOnDecoratedInnerBox, { return true; } - - protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) - { - base.OnAttachedToLogicalTree(e); - this.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, SpinnerBorderBrushProperty, - SharedTokenKey.ColorBorder)); - this.AddTokenBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, SpinnerHandleWidthTokenProperty, - ButtonSpinnerTokenKey.HandleWidth)); - } } \ No newline at end of file diff --git a/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBoxTheme.cs b/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBoxTheme.cs index 52a1214cf..303f26376 100644 --- a/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBoxTheme.cs +++ b/src/AtomUI.Controls/ComboBox/ComboBoxSpinnerInnerBoxTheme.cs @@ -38,6 +38,10 @@ internal class ComboBoxSpinnerInnerBoxTheme : AddOnDecoratedInnerBoxTheme protected override void BuildStyles() { base.BuildStyles(); + + this.Add(ComboBoxSpinnerInnerBox.SpinnerBorderBrushProperty, SharedTokenKey.ColorBorder); + this.Add(ComboBoxSpinnerInnerBox.SpinnerHandleWidthTokenProperty, ButtonSpinnerTokenKey.HandleWidth); + var notFilledStyle = new Style(selector => selector.Nesting().Not(innerSelector => innerSelector.Nesting() diff --git a/src/AtomUI.Controls/NavMenu/NavMenuItem.cs b/src/AtomUI.Controls/NavMenu/NavMenuItem.cs index 7d0a24f1e..af81c2f27 100644 --- a/src/AtomUI.Controls/NavMenu/NavMenuItem.cs +++ b/src/AtomUI.Controls/NavMenu/NavMenuItem.cs @@ -605,8 +605,6 @@ public class NavMenuItem : HeaderedSelectingItemsControl, { Command.CanExecuteChanged -= CanExecuteChangedHandler; } - - this.DisposeTokenBindings(); } ///