From 8cc34e230d94cd00109819919500bfbcd6a21641 Mon Sep 17 00:00:00 2001 From: chinboy Date: Mon, 29 Sep 2025 00:08:06 +0800 Subject: [PATCH] Fix toggle switch content overflow bug --- .../Switch/Themes/ToggleSwitchTheme.axaml | 3 +- src/AtomUI.Controls/Switch/ToggleSwitch.cs | 34 +++++++------------ 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/AtomUI.Controls/Switch/Themes/ToggleSwitchTheme.axaml b/src/AtomUI.Controls/Switch/Themes/ToggleSwitchTheme.axaml index cf8febf20..ae08976f0 100644 --- a/src/AtomUI.Controls/Switch/Themes/ToggleSwitchTheme.axaml +++ b/src/AtomUI.Controls/Switch/Themes/ToggleSwitchTheme.axaml @@ -8,7 +8,8 @@ - + diff --git a/src/AtomUI.Controls/Switch/ToggleSwitch.cs b/src/AtomUI.Controls/Switch/ToggleSwitch.cs index 6546d2ea9..86fe1dc25 100644 --- a/src/AtomUI.Controls/Switch/ToggleSwitch.cs +++ b/src/AtomUI.Controls/Switch/ToggleSwitch.cs @@ -267,6 +267,7 @@ public class ToggleSwitch : ToggleButton, private CompositeDisposable? _onBindingDisposables; private CompositeDisposable? _offBindingDisposables; private WaveSpiritDecorator? _waveSpiritDecorator; + private Canvas? _mainLayout; static ToggleSwitch() { @@ -353,32 +354,20 @@ public class ToggleSwitch : ToggleButton, protected override Size ArrangeOverride(Size finalSize) { - if (_switchKnob is not null) + _mainLayout?.Arrange(new Rect(DesiredSize)); + if (!_isCheckedChanged) { - if (!_isCheckedChanged) - { - _switchKnob.Arrange(KnobRect); - } - else - { - _switchKnob.Arrange(KnobMovingRect); - } + _switchKnob?.Arrange(KnobRect); } - - if (_offContentPresenter != null) + else { - _offContentPresenter.Arrange(new Rect(new Point(OffContentOffset.X, OffContentOffset.Y), _offContentPresenter.DesiredSize)); - } - - if (_onContentPresenter != null) - { - _onContentPresenter.Arrange(new Rect(new Point(OnContentOffset.X, OnContentOffset.Y), _onContentPresenter.DesiredSize)); - } - - if (_waveSpiritDecorator != null) - { - _waveSpiritDecorator.Arrange(new Rect(DesiredSize)); + _switchKnob?.Arrange(KnobMovingRect); } + + _offContentPresenter?.Arrange(new Rect(new Point(OffContentOffset.X, OffContentOffset.Y), _offContentPresenter.DesiredSize)); + _onContentPresenter?.Arrange(new Rect(new Point(OnContentOffset.X, OnContentOffset.Y), _onContentPresenter.DesiredSize)); + _waveSpiritDecorator?.Arrange(new Rect(DesiredSize)); + return finalSize; } @@ -501,6 +490,7 @@ public class ToggleSwitch : ToggleButton, _onContentPresenter = scope.Find(ToggleSwitchThemeConstants.OnContentPresenterPart); _offContentPresenter = scope.Find(ToggleSwitchThemeConstants.OffContentPresenterPart); _waveSpiritDecorator = e.NameScope.Find(ToggleSwitchThemeConstants.WaveSpiritPart); + _mainLayout = e.NameScope.Find(ToggleSwitchThemeConstants.MainContainerPart); HandleLoadingState(IsLoading); }