mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-21 16:36:27 +08:00
Refactor AddOnDecoratedInnerBox
Remove ITokenResourceConsumer
This commit is contained in:
@@ -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 />
|
||||
|
||||
Reference in New Issue
Block a user