From d9d612027abbbbeae6b615fe9a99847622a161b3 Mon Sep 17 00:00:00 2001 From: chinboy Date: Tue, 8 Jul 2025 20:55:53 +0800 Subject: [PATCH] refactor ResourceBindingsDisposable implementation --- Directory.Packages.props | 1 + build/Version.props | 2 +- scripts/PublishToLocalSources.ps1 | 60 ++++++--- .../Column/DataGridRowExpander.cs | 7 +- .../DataGrid.Privates.cs | 8 +- .../AddOnDecoratedBox/AddOnDecoratedBox.cs | 6 +- src/AtomUI.Controls/Alert/Alert.cs | 6 +- .../Badge/DotBadgeIndicator.cs | 6 +- .../ButtonSpinner/ButtonSpinnerInnerBox.cs | 6 +- src/AtomUI.Controls/Buttons/Button.cs | 115 ++++++++++-------- src/AtomUI.Controls/Buttons/DropdownButton.cs | 37 +++--- src/AtomUI.Controls/Buttons/SplitButton.cs | 6 +- .../Themes/Button/BaseButtonTheme.axaml | 10 +- .../Utils/ButtonIconVisibleConverter.cs | 9 +- .../Calendar/BaseCalendarDayButton.cs | 6 +- src/AtomUI.Controls/Calendar/Calendar.cs | 6 +- src/AtomUI.Controls/Calendar/CalendarItem.cs | 6 +- .../CheckBox/CheckBoxIndicator.cs | 6 +- src/AtomUI.Controls/Collapse/Collapse.cs | 6 +- .../CalendarView/CalendarDayButton.cs | 7 +- .../DatePicker/CalendarView/CalendarItem.cs | 8 +- .../DatePicker/DatePickerPresenter.cs | 6 +- src/AtomUI.Controls/Drawer/Drawer.cs | 6 +- src/AtomUI.Controls/Expander/Expander.cs | 6 +- src/AtomUI.Controls/Flyouts/FlyoutHost.cs | 6 +- .../Flyouts/MenuFlyoutPresenter.cs | 7 +- src/AtomUI.Controls/GroupBox/GroupBox.cs | 6 +- src/AtomUI.Controls/Input/TextBox.cs | 6 +- src/AtomUI.Controls/ListBox/ListBox.cs | 7 +- src/AtomUI.Controls/Menu/Menu.cs | 6 +- src/AtomUI.Controls/Menu/MenuSeparator.cs | 6 +- src/AtomUI.Controls/NavMenu/NavMenu.cs | 6 +- .../Notifications/NotificationProgressBar.cs | 6 +- .../Pagination/AbstractPagination.cs | 7 +- .../Pagination/PageSizeComboBoxItem.cs | 6 +- .../Pagination/PaginationNav.cs | 13 +- .../Pagination/PaginationNavItem.cs | 6 +- .../Pagination/QuickJumperBar.cs | 6 +- src/AtomUI.Controls/Popup/Popup.cs | 6 +- .../RadioButton/RadioIndicator.cs | 6 +- src/AtomUI.Controls/Slider/SliderTrack.cs | 7 +- src/AtomUI.Controls/Switch/SwitchKnob.cs | 6 +- .../Switch/Themes/ToggleSwitchTheme.axaml | 2 +- src/AtomUI.Controls/Switch/ToggleSwitch.cs | 10 +- .../TabControl/BaseTabControl.cs | 6 +- .../TabControl/BaseTabScrollViewer.cs | 6 +- src/AtomUI.Controls/TabControl/TabItem.cs | 6 +- .../TabControl/TabStrip/BaseTabStrip.cs | 6 +- .../TabControl/TabStrip/TabStripItem.cs | 6 +- src/AtomUI.Controls/Tag/Tag.cs | 6 +- src/AtomUI.Controls/Tag/Themes/TagTheme.axaml | 24 ++-- src/AtomUI.Controls/TextBlock/TextBlock.cs | 6 +- .../TimePicker/DateTimePickerPanel.cs | 6 +- .../TimePicker/TimePickerPresenter.cs | 6 +- .../TimePicker/TimeView/TimeView.cs | 11 +- .../Timeline/TimelineIndicator.cs | 7 +- .../TreeView/DragPreviewAdorner.cs | 6 +- src/AtomUI.Controls/TreeView/TreeViewItem.cs | 6 +- src/AtomUI.Controls/Window/Window.cs | 1 + .../AtomUI.ReactiveUI.csproj | 5 +- src/AtomUI.Theme/AtomUI.Theme.csproj | 3 +- src/AtomUI.Theme/IResourceBindingManager.cs | 4 +- src/AtomUI.Theme/ThemeManager.cs | 6 +- 63 files changed, 425 insertions(+), 175 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index a0cb10b80..8572c4368 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,6 +7,7 @@ + diff --git a/build/Version.props b/build/Version.props index 10bfa0801..536e604b4 100644 --- a/build/Version.props +++ b/build/Version.props @@ -2,7 +2,7 @@ $(NoWarn);CS7035 11.3.2 - 0.0.6-build.1 + 0.0.6-build.2 diff --git a/scripts/PublishToLocalSources.ps1 b/scripts/PublishToLocalSources.ps1 index 696c08875..5087352c8 100644 --- a/scripts/PublishToLocalSources.ps1 +++ b/scripts/PublishToLocalSources.ps1 @@ -4,26 +4,52 @@ param ( [string]$preReleaseTag ) +function Push-NuGetPackages { + [CmdletBinding(SupportsShouldProcess = $true)] + param( + [string]$PackagePath = "../output/Nuget", + [Parameter(Mandatory = $true)] + [string]$Source + ) + + # 获取所有NuGet包 + $packages = Get-ChildItem -Path $PackagePath -Filter *.nupkg -Recurse -File + + if (-not $packages) { + Write-Warning "未找到任何.nupkg文件" + return + } + + # 处理每个包 + foreach ($pkg in $packages) { + if ($PSCmdlet.ShouldProcess($pkg.Name, "推送并删除")) { + try { + # 推送包 + dotnet nuget push $pkg.FullName --source $Source + + if ($LASTEXITCODE -eq 0) { + # 删除成功推送的包 + Remove-Item $pkg.FullName -Force + Write-Host "✓ 成功: $($pkg.Name)" -ForegroundColor Green + } else { + Write-Warning "推送失败: $($pkg.Name) (退出码: $LASTEXITCODE)" + } + } + catch { + Write-Error "处理 $($pkg.Name) 时出错: $_" + } + } + } +} + dotnet build -v diag --configuration $buildType ../packages/AtomUI/AtomUI.csproj -dotnet build -v diag --configuration $buildType ../src/AtomUI.Controls.DataGrid/AtomUI.Controls.DataGrid.csproj dotnet pack --no-build --configuration $buildType ../packages/AtomUI/AtomUI.csproj dotnet pack --no-build --configuration $buildType ../src/AtomUI.IconPkg.Generator/AtomUI.IconPkg.Generator.csproj dotnet pack --no-build --configuration $buildType ../src/AtomUI.Generator/AtomUI.Generator.csproj + +Push-NuGetPackages -Source $localSourcesDir -Confirm:$false + +dotnet build -v diag --configuration $buildType ../src/AtomUI.Controls.DataGrid/AtomUI.Controls.DataGrid.csproj dotnet pack --no-build --configuration $buildType ../src/AtomUI.Controls.DataGrid/AtomUI.Controls.DataGrid.csproj -# 探测包 -$packages = Get-ChildItem -Path ../output/Nuget -Filter *.nupkg -Recurse -File - -foreach ($pkg in $packages) { - try { - # 执行 NuGet 推送命令 - dotnet nuget push $pkg.FullName --source $localSourcesDir - - if ($LASTEXITCODE -ne 0) { - Write-Warning "推送失败: $($pkg.Name)" - } - } - catch { - Write-Error "推送 $($pkg.Name) 时发生异常: $_" - } -} \ No newline at end of file +Push-NuGetPackages -Source $localSourcesDir -Confirm:$false diff --git a/src/AtomUI.Controls.DataGrid/Column/DataGridRowExpander.cs b/src/AtomUI.Controls.DataGrid/Column/DataGridRowExpander.cs index 12ed8a189..97e7dbaaf 100644 --- a/src/AtomUI.Controls.DataGrid/Column/DataGridRowExpander.cs +++ b/src/AtomUI.Controls.DataGrid/Column/DataGridRowExpander.cs @@ -44,7 +44,12 @@ internal class DataGridRowExpander : ToggleButton, } private CompositeDisposable? _resourceBindingsDisposable; - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; + + CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable + { + get => _resourceBindingsDisposable; + set => _resourceBindingsDisposable = value; + } private Rectangle? _horizontalIndicator; private Rectangle? _verticalIndicator; diff --git a/src/AtomUI.Controls.DataGrid/DataGrid.Privates.cs b/src/AtomUI.Controls.DataGrid/DataGrid.Privates.cs index 1c5659416..79ac7ddf6 100644 --- a/src/AtomUI.Controls.DataGrid/DataGrid.Privates.cs +++ b/src/AtomUI.Controls.DataGrid/DataGrid.Privates.cs @@ -209,7 +209,13 @@ public partial class DataGrid Control IMotionAwareControl.PropertyBindTarget => this; Control IControlSharedTokenResourcesHost.HostControl => this; string IControlSharedTokenResourcesHost.TokenId => DataGridToken.ID; - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; + + CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable + { + get => _resourceBindingsDisposable; + set => _resourceBindingsDisposable = value; + } + private CompositeDisposable? _resourceBindingsDisposable; #endregion diff --git a/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedBox.cs b/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedBox.cs index ac1ee5e34..779381516 100644 --- a/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedBox.cs +++ b/src/AtomUI.Controls/AddOnDecoratedBox/AddOnDecoratedBox.cs @@ -177,7 +177,11 @@ public class AddOnDecoratedBox : ContentControl, Control IControlSharedTokenResourcesHost.HostControl => this; string IControlSharedTokenResourcesHost.TokenId => AddOnDecoratedBoxToken.ID; - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; + CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable + { + get => _resourceBindingsDisposable; + set => _resourceBindingsDisposable = value; + } #endregion diff --git a/src/AtomUI.Controls/Alert/Alert.cs b/src/AtomUI.Controls/Alert/Alert.cs index af5d37e5a..84e917ff3 100644 --- a/src/AtomUI.Controls/Alert/Alert.cs +++ b/src/AtomUI.Controls/Alert/Alert.cs @@ -117,7 +117,11 @@ public class Alert : TemplatedControl, Control IControlSharedTokenResourcesHost.HostControl => this; string IControlSharedTokenResourcesHost.TokenId => AlertToken.ID; - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; + CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable + { + get => _resourceBindingsDisposable; + set => _resourceBindingsDisposable = value; + } #endregion diff --git a/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs b/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs index e4fef2df6..f88a5ce68 100644 --- a/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs +++ b/src/AtomUI.Controls/Badge/DotBadgeIndicator.cs @@ -41,7 +41,11 @@ internal class DotBadgeIndicator : Control, set => SetValue(BadgeShadowSizeProperty, value); } - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; + CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable + { + get => _resourceBindingsDisposable; + set => _resourceBindingsDisposable = value; + } private BoxShadows _boxShadows; private CompositeDisposable? _resourceBindingsDisposable; diff --git a/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs b/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs index a3a353a51..741fa4421 100644 --- a/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs +++ b/src/AtomUI.Controls/ButtonSpinner/ButtonSpinnerInnerBox.cs @@ -99,7 +99,11 @@ internal class ButtonSpinnerInnerBox : AddOnDecoratedInnerBox, set => SetAndRaise(SpinnerHandleWidthTokenProperty, ref _spinnerHandleWidthToken, value); } - CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable => _resourceBindingsDisposable; + CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable + { + get => _resourceBindingsDisposable; + set => _resourceBindingsDisposable = value; + } #endregion diff --git a/src/AtomUI.Controls/Buttons/Button.cs b/src/AtomUI.Controls/Buttons/Button.cs index e35e6cb7c..67c73c179 100644 --- a/src/AtomUI.Controls/Buttons/Button.cs +++ b/src/AtomUI.Controls/Buttons/Button.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Reactive.Disposables; using AtomUI.Animations; using AtomUI.Controls.Themes; @@ -40,7 +41,7 @@ public enum ButtonShape [PseudoClasses( ButtonPseudoClass.IconOnly, - ButtonPseudoClass.Loading, + ButtonPseudoClass.Loading, ButtonPseudoClass.IsDanger, ButtonPseudoClass.DefaultType, ButtonPseudoClass.PrimaryType, @@ -73,10 +74,10 @@ public class Button : AvaloniaButton, public static readonly StyledProperty SizeTypeProperty = SizeTypeAwareControlProperty.SizeTypeProperty.AddOwner