Refactor AddOnDecoratedInnerBox

Remove ITokenResourceConsumer
This commit is contained in:
chinboy
2025-03-06 08:47:49 +08:00
parent c9b7edc58b
commit 668d45ae80
7 changed files with 26 additions and 49 deletions
@@ -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<AddOnDecoratedInnerBox, double> MarginXSTokenProperty =
internal static readonly DirectProperty<AddOnDecoratedInnerBox, double> MarginXSTokenProperty =
AvaloniaProperty.RegisterDirect<AddOnDecoratedInnerBox, double>(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);
@@ -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);
@@ -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)
@@ -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 =>
@@ -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));
}
}
@@ -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()
@@ -605,8 +605,6 @@ public class NavMenuItem : HeaderedSelectingItemsControl,
{
Command.CanExecuteChanged -= CanExecuteChangedHandler;
}
this.DisposeTokenBindings();
}
/// <inheritdoc />