From 7e2d5be3cd60a4cc005ff04644e6971ab881f1fd Mon Sep 17 00:00:00 2001 From: GG Z <903524121@qq.com> Date: Sun, 22 Feb 2026 20:03:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Melskin/Controls/Button.xaml | 1 + Melskin/Controls/Card.xaml | 37 +- Melskin/Controls/CheckBox.xaml | 2 +- Melskin/Controls/ChooseBox.xaml | 6 +- Melskin/Controls/GroupBox.xaml | 1 - Melskin/Controls/MultiComboBox.xaml | 3 +- Melskin/Controls/MultiComboBox.xaml.cs | 2 +- Melskin/Controls/ProgressBar.xaml | 393 ++- Melskin/Controls/Slider.xaml | 17 +- Melskin/Controls/StepBar.xaml | 121 + Melskin/Controls/StepBar.xaml.cs | 124 + Melskin/Controls/TextBox.xaml | 1 + Melskin/Controls/TutorialPrompt.xaml | 149 + Melskin/Controls/TutorialPrompt.xaml.cs | 147 + .../Internal/ProgressToAngleConverter.cs | 62 + Melskin/Melskin.csproj | 2 +- Melskin/Themes/Dark.xaml | 6 +- Melskin/Themes/Styles.xaml | 2 + MelskinTest/MainWindow.xaml | 62 +- MelskinTest/MainWindow.xaml.cs | 45 +- ShrlAlgo.Addin.Test/ActionWindow.xaml.cs | 1 - ShrlAlgo.Addin.Test/AddWallTypeParam.cs | 31 - ShrlAlgo.Addin.Test/Data.cs | 2435 ----------------- ShrlAlgo.Addin.Test/FluentAddin.cs | 396 --- ShrlAlgo.Addin.Test/GASInstancesCreator.cs | 320 --- ShrlAlgo.Addin.Test/GlobalUsings.cs | 5 +- ShrlAlgo.Addin.Test/InstancesCreator.cs | 69 - ShrlAlgo.Addin.Test/ModifySystemTypeCmd.cs | 144 +- .../PlaceInstanceByCircleCmd.cs | 65 - ShrlAlgo.Addin.Test/RevitAddin.cs | 293 +- .../ShrlAlgo.Addin.Test.csproj | 2 +- ShrlAlgo.Addin.Test/TempCmd.cs | 307 --- .../CivilConnectionCmd.cs | 0 .../CreateOpeningsCmd.cs | 0 .../CreateOpeningsView.xaml | 0 .../CreateOpeningsView.xaml.cs | 0 .../CreateOpeningsViewModel.cs | 0 .../{RvCivil => ArchStru}/ModelSplitterCmd.cs | 0 .../{RvCivil => ArchStru}/PlacementType.cs | 0 .../ResolveCivilConnectView.xaml | 0 .../ResolveCivilConnectView.xaml.cs | 0 .../ResolveCivilConnectViewModel.cs | 2 +- .../{RvCivil => ArchStru}/Rotation.cs | 0 .../{RvCivil => ArchStru}/SlopedFloorCmd.cs | 0 .../SplitComsByLevelCmd.cs | 2 +- .../{RvCivil => ArchStru}/SplitFloorCmd.cs | 0 .../{RvCivil => ArchStru}/WallFinishesCmd.cs | 0 .../WallFinishesView.xaml | 0 .../WallFinishesView.xaml.cs | 0 .../WallFinishesViewModel.cs | 0 .../ModelCheckCmd.cs | 0 .../ModelCheckView.xaml | 17 +- .../ModelCheckView.xaml.cs | 0 .../ModelCheckViewModel.cs | 115 +- .../Common/Assists/WinDialogAssist.cs | 12 +- .../Controls}/ColorPickerViewModel.cs | 2 +- .../Controls}/ColorPickerWin.xaml | 35 +- .../Controls}/ColorPickerWin.xaml.cs | 2 +- .../Controls}/MessageModel.cs | 2 +- .../Controls}/MessageViewModel.cs | 2 +- .../Controls}/MessageWin.xaml | 31 +- .../Controls}/MessageWin.xaml.cs | 2 +- .../Controls}/NavigateViewViewModel.cs | 2 +- .../Controls}/NavigateViewWin.xaml | 25 +- .../Controls}/NavigateViewWin.xaml.cs | 2 +- .../Controls}/ProcessEventHandler.cs | 2 +- .../Controls}/ProgressBarManager.cs | 2 +- .../Controls}/ProgressMonitorView.xaml | 7 +- .../Controls}/ProgressMonitorView.xaml.cs | 2 +- .../Controls}/ProgressMonitorViewModel.cs | 2 +- .../{RvCivil => Deco}/BricksFinishesCmd.cs | 0 .../{RvCivil => Deco}/BricksFinishesView.xaml | 0 .../BricksFinishesView.xaml.cs | 0 .../BricksFinishesViewModel.cs | 0 .../{RvCivil => Deco}/FloorFinishesCmd.cs | 0 .../{RvCivil => Deco}/FloorFinishesView.xaml | 0 .../FloorFinishesView.xaml.cs | 0 .../FloorFinishesViewModel.cs | 0 .../AdaptiveMEPTagCmd.cs | 5 +- .../{RvView => DrawSheet}/AlignTagsCmd.cs | 7 +- .../{RvView => DrawSheet}/AlignTagsView.xaml | 6 +- .../AlignTagsView.xaml.cs | 6 +- .../AlignTagsViewModel.cs | 5 +- .../{RvView => DrawSheet}/ArrangeTagsCmd.cs | 36 +- .../CivilViewFilterCmd.cs | 5 +- .../DimensionBy2LineCmd.cs | 5 +- .../ElementControlDock.xaml | 2 +- .../ElementControlDock.xaml.cs | 5 +- .../ElementsControlCmd.cs | 6 +- .../ExportSchedulesCmd.cs | 5 +- .../{RvView => DrawSheet}/PanelScheduleCmd.cs | 5 +- .../QuickSelectionCmd.cs | 9 +- .../QuickSelectionView.xaml | 3 +- .../DrawSheet/QuickSelectionView.xaml.cs | 20 + .../QuickViewSectionCmd.cs | 5 +- .../QuickViewSectionView.xaml | 6 +- .../QuickViewSectionView.xaml.cs | 6 +- .../QuickViewSectionViewModel.cs | 6 +- .../SectionBoxControllerCmd.cs | 5 +- .../SectionBoxControllerView.xaml | 11 +- .../SectionBoxControllerView.xaml.cs | 6 +- .../SectionBoxControllerViewModel.cs | 0 .../SwitchBackgroundCmd.cs | 6 +- .../{RvView => DrawSheet}/SystemDisplayCmd.cs | 8 +- .../SystemDisplayView.xaml | 7 +- .../SystemDisplayView.xaml.cs | 6 +- .../SystemDisplayViewModel.cs | 2 +- .../{RvView => DrawSheet}/UserDisplayStyle.cs | 0 .../UserViewDetailLevel.cs | 0 .../UserViewDiscipline.cs | 0 .../{RvView => DrawSheet}/UserViewType.cs | 0 .../{RvView => DrawSheet}/ViewManagerCmd.cs | 7 +- .../{RvView => DrawSheet}/ViewManagerModel.cs | 5 +- .../ViewManagerView.xaml | 14 +- .../ViewManagerView.xaml.cs | 6 +- .../ViewManagerViewModel.cs | 18 +- .../VisibilityControlCmd.cs | 7 +- .../{RvView => DrawSheet}/VisibilityView.xaml | 6 +- .../VisibilityView.xaml.cs | 6 +- .../VisibilityViewModel.cs | 5 +- .../{UIRibbon => Entry}/DrawingViewApp.cs | 30 +- .../{UIRibbon => Entry}/FamilyApp.cs | 15 +- .../{UIRibbon => Entry}/ModifyTabApp.cs | 67 +- .../{UIRibbon => Entry}/RvApp.cs | 51 +- .../{UIRibbon => Entry}/TabManagerApp.cs | 5 +- .../FamMaster/CutGeologyByLoopCmd.cs | 124 + .../{RvFamily => FamMaster}/ExplodeDwgCmd.cs | 6 +- .../FamilyLibraryCmd.cs | 6 +- .../FamilyLibraryView.xaml | 5 +- .../FamilyLibraryView.xaml.cs | 7 +- .../FamilyLibraryViewModel.cs | 6 +- .../FamilyModel.cs | 0 .../FamilyProcessorCmd.cs | 7 +- .../FamilyProcessorView.xaml | 5 +- .../FamilyProcessorView.xaml.cs | 6 +- .../FamilyProcessorViewModel.cs | 11 +- .../LoadedFamilyDropHandler.cs | 7 +- .../ModelByCurveCreatorCmd.cs | 6 +- .../ModelByCurveCreatorView.xaml | 10 +- .../ModelByCurveCreatorView.xaml.cs | 6 +- .../ModelByCurveCreatorViewModel.cs | 0 .../MoveElementByRelationshipCmd.cs | 6 +- .../PlaceInstanceByCircleCmd.cs | 6 +- .../ReplaceInstanceCmd.cs | 6 +- .../SplitImportInstanceCmd.cs | 6 +- .../UpgradeFamilyCmd.cs | 7 +- .../AlignModelElement.cs | 6 +- .../{RvCommon => General}/AlignType.cs | 6 +- .../{RvCommon => General}/AutoSaveCmd.cs | 8 +- .../{RvCommon => General}/AutoSaveView.xaml | 5 +- .../AutoSaveView.xaml.cs | 6 +- .../AutoSaveViewModel.cs | 0 .../DetailSelectFiltersView.xaml | 7 +- .../DetailSelectFiltersView.xaml.cs | 6 +- .../DetailSelectFiltersViewModel.cs | 0 .../{RvCommon => General}/PureModelCmd.cs | 6 +- .../SeparateModelCmd.cs | 7 +- .../SeparateModelViewModel.cs | 6 +- .../SeparateModelWin.xaml | 6 +- .../SeparateModelWin.xaml.cs | 6 +- .../{RvMEP => Mep}/AddInsulationCmd.cs | 5 +- .../{RvMEP => Mep}/AddInsulationView.xaml | 6 +- .../{RvMEP => Mep}/AddInsulationView.xaml.cs | 6 +- .../{RvMEP => Mep}/AddInsulationViewModel.cs | 13 +- .../Mep}/AlignMEPCurvesToSlabCmd.cs | 2 +- .../{RvMEP => Mep}/AnyConnectCmd.cs | 5 +- .../{RvMEP => Mep}/AnyConnectView.xaml | 7 +- .../{RvMEP => Mep}/AnyConnectView.xaml.cs | 6 +- .../{RvMEP => Mep}/AnyConnectViewModel.cs | 0 .../{RvMEP => Mep}/ArrangeMEPCurveCmd.cs | 7 +- .../{RvMEP => Mep}/ArrangeMEPCurveView.xaml | 4 +- .../ArrangeMEPCurveView.xaml.cs | 6 +- .../ArrangeMEPCurveViewModel.cs | 10 +- .../AutoConnectOptionsView.xaml | 7 +- .../AutoConnectOptionsView.xaml.cs | 6 +- .../{RvMEP => Mep}/BloomConnectorCmd.cs | 6 +- .../{RvMEP => Mep}/BreakMEPCurveCmd.cs | 6 +- .../{RvMEP => Mep}/CableLayoutCmd.cs | 6 +- .../{RvMEP => Mep}/CableLayoutView.xaml | 7 +- .../{RvMEP => Mep}/CableLayoutView.xaml.cs | 6 +- .../{RvMEP => Mep}/CableLayoutViewModel.cs | 0 .../{RvMEP => Mep}/ClashReportCmd.cs | 5 +- .../{RvMEP => Mep}/ClashReportView.xaml | 6 +- .../{RvMEP => Mep}/ClashReportView.xaml.cs | 6 +- .../{RvMEP => Mep}/ClashReportViewModel.cs | 7 +- .../{RvMEP => Mep}/ClashResolveCmd.cs | 7 +- .../{RvMEP => Mep}/ClashResolveView.xaml | 20 +- .../{RvMEP => Mep}/ClashResolveView.xaml.cs | 6 +- .../{RvMEP => Mep}/ClashResolveViewModel.cs | 0 .../Mep/ConnectSprinklerCmd.cs | 113 + .../{RvMEP => Mep}/CorrectMEPCurveSlopeCmd.cs | 5 +- .../{RvMEP => Mep}/DisconnectCmd.cs | 6 +- .../{RvMEP => Mep}/FlipWorkplaneCmd.cs | 5 +- .../{RvMEP => Mep}/ForceConnectCmd.cs | 5 +- .../{RvMEP => Mep}/HeadroomCheckCmd.cs | 9 +- .../{RvMEP => Mep}/HeadroomCheckView.xaml | 6 +- .../{RvMEP => Mep}/HeadroomCheckView.xaml.cs | 6 +- .../{RvMEP => Mep}/HeadroomCheckViewModel.cs | 6 +- .../{RvMEP => Mep}/InsulationItem.cs | 0 .../{RvMEP => Mep}/MoveConnectCmd.cs | 6 +- .../{RvMEP => Mep}/MoveMEPCmd.cs | 7 +- .../{RvMEP => Mep}/MoveMEPCurveView.xaml | 7 +- .../{RvMEP => Mep}/MoveMEPCurveView.xaml.cs | 6 +- .../{RvMEP => Mep}/MoveMEPCurveViewModel.cs | 0 .../{RvMEP => Mep}/RoomCheckItem.cs | 0 .../{RvMEP => Mep}/RotateInstanceCmd.cs | 7 +- .../{RvMEP => Mep}/RotateMEPView.xaml | 7 +- .../{RvMEP => Mep}/RotateMEPView.xaml.cs | 6 +- .../{RvMEP => Mep}/RotateMEPViewModel.cs | 6 +- .../{RvMEP => Mep}/RotationAngle.cs | 6 +- .../{RvMEP => Mep}/StandMepCurveCmd.cs | 7 +- .../{RvMEP => Mep}/StandMepCurveView.xaml | 6 +- .../{RvMEP => Mep}/StandMepCurveView.xaml.cs | 6 +- .../{RvMEP => Mep}/StandMepCurveViewModel.cs | 28 +- .../{RvMEP => Mep}/SystemModel.cs | 0 .../TerminalConnectToDuctCmd.cs | 6 +- .../ModelManager/TemplateManagerView.xaml.cs | 11 - .../Modeling}/CADCurveToModelCurveCmd.cs | 5 +- .../InstanceCreatorCmd.cs | 5 +- .../InstanceCreatorView.xaml | 6 +- .../InstanceCreatorView.xaml.cs | 6 +- .../InstanceCreatorViewModel.cs | 9 +- .../{RvCommon => Modeling}/PipesCreatorCmd.cs | 7 +- .../PipesCreatorView.xaml | 6 +- .../PipesCreatorView.xaml.cs | 6 +- .../PipesCreatorViewModel.cs | 10 +- .../OptionsBarResources.xaml | 182 ++ .../RvCommon/QuickSelectionView.xaml.cs | 13 - .../RvFamily/CutGeologyByLoopCmd.cs | 130 - .../RvMEP/RevitCommandEndedMonitor.cs | 39 - .../ShrlAlgo.RvKits.addin | 2 +- .../ShrlAlgoToolkit.RevitAddins.csproj | 10 +- .../CorrectReferLevelExecutes.cs | 4 +- .../MergeSharedParametersCmd.cs | 9 +- .../ModifyModelParamsCmd.cs | 8 +- .../RemoveParamCmd.cs | 22 +- .../RenameFamilyItem.cs | 0 .../RenameFamilyNameCmd.cs | 10 +- .../RenameFamilyView.xaml | 6 +- .../RenameFamilyView.xaml.cs | 6 +- .../RenameFamilyViewModel.cs | 7 +- .../RenameTypeItem.cs | 0 .../RenameTypeNameCmd.cs | 8 +- .../RenameTypeView.xaml | 66 +- .../RenameTypeView.xaml.cs | 6 +- .../RenameTypeViewModel.cs | 17 +- .../TemplateManagerCmd.cs | 11 +- .../TemplateManagerView.xaml | 6 +- .../Standardizer/TemplateManagerView.xaml.cs | 18 + .../TemplateManagerViewModel.cs | 16 +- .../Assists/PublishAssist.cs | 238 +- .../Base/ActionEventHandler.cs | 72 + .../Base/BaseApplication.cs | 64 + ShrlAlgoToolkit.RevitCore/Base/BaseCommand.cs | 42 + .../Base/ExternalEventHelper.cs | 19 + .../Extensions/DocumentExtensions.cs | 29 + .../Extensions/FamilyInstanceExtensions.cs | 60 + .../ShrlAlgoToolkit.RevitCore.projitems | 5 + 258 files changed, 2916 insertions(+), 5013 deletions(-) create mode 100644 Melskin/Controls/StepBar.xaml create mode 100644 Melskin/Controls/StepBar.xaml.cs create mode 100644 Melskin/Controls/TutorialPrompt.xaml create mode 100644 Melskin/Controls/TutorialPrompt.xaml.cs create mode 100644 Melskin/Converters/Internal/ProgressToAngleConverter.cs delete mode 100644 ShrlAlgo.Addin.Test/AddWallTypeParam.cs delete mode 100644 ShrlAlgo.Addin.Test/Data.cs delete mode 100644 ShrlAlgo.Addin.Test/FluentAddin.cs delete mode 100644 ShrlAlgo.Addin.Test/GASInstancesCreator.cs delete mode 100644 ShrlAlgo.Addin.Test/InstancesCreator.cs delete mode 100644 ShrlAlgo.Addin.Test/PlaceInstanceByCircleCmd.cs delete mode 100644 ShrlAlgo.Addin.Test/TempCmd.cs rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/CivilConnectionCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/CreateOpeningsCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/CreateOpeningsView.xaml (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/CreateOpeningsView.xaml.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/CreateOpeningsViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/ModelSplitterCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/PlacementType.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/ResolveCivilConnectView.xaml (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/ResolveCivilConnectView.xaml.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/ResolveCivilConnectViewModel.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/Rotation.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/SlopedFloorCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/SplitComsByLevelCmd.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/SplitFloorCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/WallFinishesCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/WallFinishesView.xaml (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/WallFinishesView.xaml.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => ArchStru}/WallFinishesViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Checker}/ModelCheckCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Checker}/ModelCheckView.xaml (93%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Checker}/ModelCheckView.xaml.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Checker}/ModelCheckViewModel.cs (85%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ColorPickerViewModel.cs (96%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ColorPickerWin.xaml (82%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ColorPickerWin.xaml.cs (80%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/MessageModel.cs (89%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/MessageViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/MessageWin.xaml (83%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/MessageWin.xaml.cs (82%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/NavigateViewViewModel.cs (94%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/NavigateViewWin.xaml (73%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/NavigateViewWin.xaml.cs (83%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ProcessEventHandler.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ProgressBarManager.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ProgressMonitorView.xaml (79%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ProgressMonitorView.xaml.cs (91%) rename ShrlAlgoToolkit.RevitAddins/{Windows => Common/Controls}/ProgressMonitorViewModel.cs (94%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/BricksFinishesCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/BricksFinishesView.xaml (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/BricksFinishesView.xaml.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/BricksFinishesViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/FloorFinishesCmd.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/FloorFinishesView.xaml (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/FloorFinishesView.xaml.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCivil => Deco}/FloorFinishesViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/AdaptiveMEPTagCmd.cs (91%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/AlignTagsCmd.cs (59%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/AlignTagsView.xaml (87%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/AlignTagsView.xaml.cs (59%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/AlignTagsViewModel.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ArrangeTagsCmd.cs (89%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/CivilViewFilterCmd.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/DimensionBy2LineCmd.cs (94%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ElementControlDock.xaml (97%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ElementControlDock.xaml.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ElementsControlCmd.cs (85%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ExportSchedulesCmd.cs (96%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/PanelScheduleCmd.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => DrawSheet}/QuickSelectionCmd.cs (51%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => DrawSheet}/QuickSelectionView.xaml (77%) create mode 100644 ShrlAlgoToolkit.RevitAddins/DrawSheet/QuickSelectionView.xaml.cs rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/QuickViewSectionCmd.cs (81%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/QuickViewSectionView.xaml (89%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/QuickViewSectionView.xaml.cs (56%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/QuickViewSectionViewModel.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SectionBoxControllerCmd.cs (85%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SectionBoxControllerView.xaml (93%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SectionBoxControllerView.xaml.cs (66%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SectionBoxControllerViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SwitchBackgroundCmd.cs (79%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SystemDisplayCmd.cs (65%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SystemDisplayView.xaml (95%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SystemDisplayView.xaml.cs (60%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/SystemDisplayViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/UserDisplayStyle.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/UserViewDetailLevel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/UserViewDiscipline.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/UserViewType.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ViewManagerCmd.cs (52%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ViewManagerModel.cs (95%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ViewManagerView.xaml (97%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ViewManagerView.xaml.cs (60%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/ViewManagerViewModel.cs (95%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/VisibilityControlCmd.cs (68%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/VisibilityView.xaml (91%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/VisibilityView.xaml.cs (59%) rename ShrlAlgoToolkit.RevitAddins/{RvView => DrawSheet}/VisibilityViewModel.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{UIRibbon => Entry}/DrawingViewApp.cs (85%) rename ShrlAlgoToolkit.RevitAddins/{UIRibbon => Entry}/FamilyApp.cs (94%) rename ShrlAlgoToolkit.RevitAddins/{UIRibbon => Entry}/ModifyTabApp.cs (91%) rename ShrlAlgoToolkit.RevitAddins/{UIRibbon => Entry}/RvApp.cs (84%) rename ShrlAlgoToolkit.RevitAddins/{UIRibbon => Entry}/TabManagerApp.cs (97%) create mode 100644 ShrlAlgoToolkit.RevitAddins/FamMaster/CutGeologyByLoopCmd.cs rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/ExplodeDwgCmd.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily/FamilyLibrary => FamMaster}/FamilyLibraryCmd.cs (63%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily/FamilyLibrary => FamMaster}/FamilyLibraryView.xaml (98%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily/FamilyLibrary => FamMaster}/FamilyLibraryView.xaml.cs (52%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily/FamilyLibrary => FamMaster}/FamilyLibraryViewModel.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily/FamilyLibrary => FamMaster}/FamilyModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/FamilyProcessorCmd.cs (51%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/FamilyProcessorView.xaml (97%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/FamilyProcessorView.xaml.cs (61%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/FamilyProcessorViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily/FamilyLibrary => FamMaster}/LoadedFamilyDropHandler.cs (66%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/ModelByCurveCreatorCmd.cs (60%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/ModelByCurveCreatorView.xaml (94%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/ModelByCurveCreatorView.xaml.cs (61%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/ModelByCurveCreatorViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/MoveElementByRelationshipCmd.cs (80%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/PlaceInstanceByCircleCmd.cs (95%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/ReplaceInstanceCmd.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => FamMaster}/SplitImportInstanceCmd.cs (91%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => FamMaster}/UpgradeFamilyCmd.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/AlignModelElement.cs (96%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/AlignType.cs (80%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/AutoSaveCmd.cs (86%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/AutoSaveView.xaml (92%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/AutoSaveView.xaml.cs (58%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/AutoSaveViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/DetailSelectFiltersView.xaml (93%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/DetailSelectFiltersView.xaml.cs (66%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/DetailSelectFiltersViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => General}/PureModelCmd.cs (91%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => General}/SeparateModelCmd.cs (55%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => General}/SeparateModelViewModel.cs (94%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => General}/SeparateModelWin.xaml (85%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => General}/SeparateModelWin.xaml.cs (59%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AddInsulationCmd.cs (72%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AddInsulationView.xaml (96%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AddInsulationView.xaml.cs (56%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AddInsulationViewModel.cs (94%) rename {ShrlAlgo.Addin.Test => ShrlAlgoToolkit.RevitAddins/Mep}/AlignMEPCurvesToSlabCmd.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AnyConnectCmd.cs (80%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AnyConnectView.xaml (95%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AnyConnectView.xaml.cs (60%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AnyConnectViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ArrangeMEPCurveCmd.cs (51%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ArrangeMEPCurveView.xaml (93%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ArrangeMEPCurveView.xaml.cs (57%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ArrangeMEPCurveViewModel.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AutoConnectOptionsView.xaml (94%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/AutoConnectOptionsView.xaml.cs (58%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/BloomConnectorCmd.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/BreakMEPCurveCmd.cs (95%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/CableLayoutCmd.cs (96%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/CableLayoutView.xaml (89%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/CableLayoutView.xaml.cs (71%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/CableLayoutViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashReportCmd.cs (74%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashReportView.xaml (97%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashReportView.xaml.cs (55%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashReportViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashResolveCmd.cs (59%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashResolveView.xaml (91%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashResolveView.xaml.cs (87%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ClashResolveViewModel.cs (100%) create mode 100644 ShrlAlgoToolkit.RevitAddins/Mep/ConnectSprinklerCmd.cs rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/CorrectMEPCurveSlopeCmd.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/DisconnectCmd.cs (90%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/FlipWorkplaneCmd.cs (89%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/ForceConnectCmd.cs (95%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/HeadroomCheckCmd.cs (94%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/HeadroomCheckView.xaml (97%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/HeadroomCheckView.xaml.cs (61%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/HeadroomCheckViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/InsulationItem.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/MoveConnectCmd.cs (98%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/MoveMEPCmd.cs (55%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/MoveMEPCurveView.xaml (90%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/MoveMEPCurveView.xaml.cs (56%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/MoveMEPCurveViewModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/RoomCheckItem.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/RotateInstanceCmd.cs (66%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/RotateMEPView.xaml (94%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/RotateMEPView.xaml.cs (60%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/RotateMEPViewModel.cs (96%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/RotationAngle.cs (69%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/StandMepCurveCmd.cs (59%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/StandMepCurveView.xaml (95%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/StandMepCurveView.xaml.cs (62%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/StandMepCurveViewModel.cs (83%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/SystemModel.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvMEP => Mep}/TerminalConnectToDuctCmd.cs (90%) delete mode 100644 ShrlAlgoToolkit.RevitAddins/ModelManager/TemplateManagerView.xaml.cs rename {ShrlAlgo.Addin.Test => ShrlAlgoToolkit.RevitAddins/Modeling}/CADCurveToModelCurveCmd.cs (96%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/InstanceCreatorCmd.cs (73%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/InstanceCreatorView.xaml (92%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/InstanceCreatorView.xaml.cs (56%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/InstanceCreatorViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/PipesCreatorCmd.cs (57%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/PipesCreatorView.xaml (88%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/PipesCreatorView.xaml.cs (60%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Modeling}/PipesCreatorViewModel.cs (97%) create mode 100644 ShrlAlgoToolkit.RevitAddins/OptionsBarResources.xaml delete mode 100644 ShrlAlgoToolkit.RevitAddins/RvCommon/QuickSelectionView.xaml.cs delete mode 100644 ShrlAlgoToolkit.RevitAddins/RvFamily/CutGeologyByLoopCmd.cs delete mode 100644 ShrlAlgoToolkit.RevitAddins/RvMEP/RevitCommandEndedMonitor.cs rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Standardizer}/CorrectReferLevelExecutes.cs (99%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Standardizer}/MergeSharedParametersCmd.cs (51%) rename ShrlAlgoToolkit.RevitAddins/{RvCommon => Standardizer}/ModifyModelParamsCmd.cs (93%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Standardizer}/RemoveParamCmd.cs (91%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameFamilyItem.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameFamilyNameCmd.cs (53%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameFamilyView.xaml (98%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameFamilyView.xaml.cs (66%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameFamilyViewModel.cs (97%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameTypeItem.cs (100%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameTypeNameCmd.cs (65%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameTypeView.xaml (88%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameTypeView.xaml.cs (65%) rename ShrlAlgoToolkit.RevitAddins/{RvFamily => Standardizer}/RenameTypeViewModel.cs (95%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Standardizer}/TemplateManagerCmd.cs (50%) rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Standardizer}/TemplateManagerView.xaml (87%) create mode 100644 ShrlAlgoToolkit.RevitAddins/Standardizer/TemplateManagerView.xaml.cs rename ShrlAlgoToolkit.RevitAddins/{ModelManager => Standardizer}/TemplateManagerViewModel.cs (93%) create mode 100644 ShrlAlgoToolkit.RevitCore/Base/ActionEventHandler.cs create mode 100644 ShrlAlgoToolkit.RevitCore/Base/BaseApplication.cs create mode 100644 ShrlAlgoToolkit.RevitCore/Base/BaseCommand.cs create mode 100644 ShrlAlgoToolkit.RevitCore/Base/ExternalEventHelper.cs create mode 100644 ShrlAlgoToolkit.RevitCore/Extensions/FamilyInstanceExtensions.cs diff --git a/Melskin/Controls/Button.xaml b/Melskin/Controls/Button.xaml index 8f67c8f..ccb3e60 100644 --- a/Melskin/Controls/Button.xaml +++ b/Melskin/Controls/Button.xaml @@ -526,6 +526,7 @@ + diff --git a/Melskin/Controls/Card.xaml b/Melskin/Controls/Card.xaml index f85aca6..0d9444d 100644 --- a/Melskin/Controls/Card.xaml +++ b/Melskin/Controls/Card.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:Melskin.Controls" xmlns:decorations="clr-namespace:Melskin.Controls.Decorations"> - + + \ No newline at end of file diff --git a/Melskin/Controls/CheckBox.xaml b/Melskin/Controls/CheckBox.xaml index a38952c..20a0e3d 100644 --- a/Melskin/Controls/CheckBox.xaml +++ b/Melskin/Controls/CheckBox.xaml @@ -186,7 +186,7 @@ - + diff --git a/Melskin/Controls/ChooseBox.xaml b/Melskin/Controls/ChooseBox.xaml index 97a05d9..5d10e6a 100644 --- a/Melskin/Controls/ChooseBox.xaml +++ b/Melskin/Controls/ChooseBox.xaml @@ -148,7 +148,7 @@ - + @@ -162,7 +162,7 @@ x:Name="ContentBorder" MinWidth="{TemplateBinding MinWidth}" MinHeight="{TemplateBinding MinHeight}" - Padding="0" + Padding="{TemplateBinding Padding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{TemplateBinding Background}" @@ -178,6 +178,7 @@ Name="PlaceholderTextBlock" Margin="5,0,0,0" VerticalAlignment="Center" + Focusable="False" FontSize="{TemplateBinding FontSize}" Foreground="{DynamicResource TextPlaceholderBrush}" Text="{TemplateBinding PlaceholderText}" @@ -185,7 +186,6 @@ - diff --git a/Melskin/Controls/MultiComboBox.xaml b/Melskin/Controls/MultiComboBox.xaml index 09e32d4..93b1737 100644 --- a/Melskin/Controls/MultiComboBox.xaml +++ b/Melskin/Controls/MultiComboBox.xaml @@ -73,7 +73,8 @@ - + + diff --git a/Melskin/Controls/MultiComboBox.xaml.cs b/Melskin/Controls/MultiComboBox.xaml.cs index d05dedd..4c732ad 100644 --- a/Melskin/Controls/MultiComboBox.xaml.cs +++ b/Melskin/Controls/MultiComboBox.xaml.cs @@ -286,7 +286,7 @@ public class MultiComboBox : Control /// /// 该属性包含了从数据源中筛选出的项,这些项将被实际显示在组合框中。通过设置此属性,可以控制哪些项最终展示给用户。当数据源发生变化或应用了新的筛选条件时,FilteredItems 会相应地更新。 /// - public IEnumerable FilteredItems + public IEnumerable? FilteredItems { get => (IEnumerable)GetValue(FilteredItemsProperty); set => SetValue(FilteredItemsProperty, value); diff --git a/Melskin/Controls/ProgressBar.xaml b/Melskin/Controls/ProgressBar.xaml index 1b232ae..77e0977 100644 --- a/Melskin/Controls/ProgressBar.xaml +++ b/Melskin/Controls/ProgressBar.xaml @@ -201,6 +201,196 @@ + + + + + + + + + + + + + + + + + + + + + @@ -210,50 +400,43 @@ + - - - - - - - - - - - + + + + - + + + + - - + + + + @@ -264,6 +447,8 @@ + + @@ -273,47 +458,66 @@ + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - + + + + @@ -324,6 +528,87 @@ + + + + + + \ No newline at end of file diff --git a/Melskin/Controls/StepBar.xaml.cs b/Melskin/Controls/StepBar.xaml.cs new file mode 100644 index 0000000..d16d45e --- /dev/null +++ b/Melskin/Controls/StepBar.xaml.cs @@ -0,0 +1,124 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; + +namespace Melskin.Controls +{ + public class StepBar : ItemsControl + { + // 使用 StepProgress 代替 SelectedIndex,允许值范围 0 到 Items.Count + public static readonly DependencyProperty StepProgressProperty = + DependencyProperty.Register("StepProgress", typeof(int), typeof(StepBar), + new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnStepProgressChanged)); + + public int StepProgress + { + get => (int)GetValue(StepProgressProperty); + set => SetValue(StepProgressProperty, value); + } + + public static readonly DependencyProperty OrientationProperty = + DependencyProperty.Register("Orientation", typeof(Orientation), typeof(StepBar), + new PropertyMetadata(Orientation.Horizontal)); + + public Orientation Orientation + { + get => (Orientation)GetValue(OrientationProperty); + set => SetValue(OrientationProperty, value); + } + + static StepBar() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(StepBar), new FrameworkPropertyMetadata(typeof(StepBar))); + } + + private static void OnStepProgressChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is StepBar bar) bar.UpdateItemsStatus(); + } + + protected override DependencyObject GetContainerForItemOverride() => new StepBarItem(); + protected override bool IsItemItsOwnContainerOverride(object item) => item is StepBarItem; + + protected override void PrepareContainerForItemOverride(DependencyObject element, object item) + { + base.PrepareContainerForItemOverride(element, item); + UpdateItemsStatus(); + } + + internal void UpdateItemsStatus() + { + for (int i = 0; i < Items.Count; i++) + { + if (ItemContainerGenerator.ContainerFromIndex(i) is StepBarItem container) + { + container.Index = i + 1; + container.IsLast = (i == Items.Count - 1); + container.Orientation = this.Orientation; + + // 核心逻辑: + // i < Progress -> 已完成 (Completed) + // i == Progress -> 进行中 (Active) + // i > Progress -> 等待 (Waiting) + if (i < StepProgress) + container.Status = StepStatus.Completed; + else if (i == StepProgress) + container.Status = StepStatus.Active; + else + container.Status = StepStatus.Waiting; + } + } + } + } + + public class StepBarItem : ContentControl + { + public static readonly DependencyProperty StatusProperty = DependencyProperty.Register("Status", typeof(StepStatus), typeof(StepBarItem), new PropertyMetadata(StepStatus.Waiting)); + public StepStatus Status { get => (StepStatus)GetValue(StatusProperty); set => SetValue(StatusProperty, value); } + + public static readonly DependencyProperty IndexProperty = DependencyProperty.Register("Index", typeof(int), typeof(StepBarItem), new PropertyMetadata(1)); + public int Index { get => (int)GetValue(IndexProperty); set => SetValue(IndexProperty, value); } + + public static readonly DependencyProperty IsLastProperty = DependencyProperty.Register("IsLast", typeof(bool), typeof(StepBarItem), new PropertyMetadata(false)); + public bool IsLast { get => (bool)GetValue(IsLastProperty); set => SetValue(IsLastProperty, value); } + + public static readonly DependencyProperty OrientationProperty = DependencyProperty.Register("Orientation", typeof(Orientation), typeof(StepBarItem), new PropertyMetadata(Orientation.Horizontal)); + public Orientation Orientation { get => (Orientation)GetValue(OrientationProperty); set => SetValue(OrientationProperty, value); } + + static StepBarItem() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(StepBarItem), new FrameworkPropertyMetadata(typeof(StepBarItem))); + } + + protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) + { + base.OnMouseLeftButtonDown(e); + var parent = ItemsControl.ItemsControlFromItemContainer(this) as StepBar; + if (parent != null) + { + int myIndex = parent.ItemContainerGenerator.IndexFromContainer(this); + + // 点击逻辑: + // 1. 如果点的是当前正在进行的步 -> 完成这一步,进度+1 + // 2. 如果点的是已经完成的步 -> 回退到那一步 + // 3. 如果点的是还没开始的步 -> 直接跳到那一步 + if (parent.StepProgress == myIndex) + { + parent.StepProgress = myIndex + 1; + } + else + { + parent.StepProgress = myIndex; + } + } + } + } +} + +public enum StepStatus +{ + Completed, + Active, + Waiting +} diff --git a/Melskin/Controls/TextBox.xaml b/Melskin/Controls/TextBox.xaml index 9e4c83a..f57a650 100644 --- a/Melskin/Controls/TextBox.xaml +++ b/Melskin/Controls/TextBox.xaml @@ -379,6 +379,7 @@ + diff --git a/Melskin/Controls/TutorialPrompt.xaml b/Melskin/Controls/TutorialPrompt.xaml new file mode 100644 index 0000000..9fa9010 --- /dev/null +++ b/Melskin/Controls/TutorialPrompt.xaml @@ -0,0 +1,149 @@ + + + + + \ No newline at end of file diff --git a/Melskin/Controls/TutorialPrompt.xaml.cs b/Melskin/Controls/TutorialPrompt.xaml.cs new file mode 100644 index 0000000..55ca87e --- /dev/null +++ b/Melskin/Controls/TutorialPrompt.xaml.cs @@ -0,0 +1,147 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; + +namespace Melskin.Controls +{ + public class TutorialGuide : Control + { + public static readonly DependencyProperty TitleProperty = DependencyProperty.Register(nameof(Title), typeof(string), typeof(TutorialGuide), new PropertyMetadata("Tutorial")); + public string Title { get => (string)GetValue(TitleProperty); set => SetValue(TitleProperty, value); } + + public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(nameof(Description), typeof(string), typeof(TutorialGuide), new PropertyMetadata(string.Empty)); + public string Description { get => (string)GetValue(DescriptionProperty); set => SetValue(DescriptionProperty, value); } + + public static readonly DependencyProperty StepTextProperty = DependencyProperty.Register(nameof(StepText), typeof(string), typeof(TutorialGuide), new PropertyMetadata("1 / 1")); + public string StepText { get => (string)GetValue(StepTextProperty); set => SetValue(StepTextProperty, value); } + + // 路由事件 + public static readonly RoutedEvent NextEvent = EventManager.RegisterRoutedEvent(nameof(Next), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TutorialGuide)); + public event RoutedEventHandler Next { add => AddHandler(NextEvent, value); remove => RemoveHandler(NextEvent, value); } + + public static readonly RoutedEvent BackEvent = EventManager.RegisterRoutedEvent(nameof(Back), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TutorialGuide)); + public event RoutedEventHandler Back { add => AddHandler(BackEvent, value); remove => RemoveHandler(BackEvent, value); } + + public static readonly RoutedEvent CloseEvent = EventManager.RegisterRoutedEvent(nameof(Close), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TutorialGuide)); + public event RoutedEventHandler Close { add => AddHandler(CloseEvent, value); remove => RemoveHandler(CloseEvent, value); } + public static readonly DependencyProperty PlacementProperty = + DependencyProperty.Register("Placement", typeof(PlacementMode), typeof(TutorialGuide), new PropertyMetadata(PlacementMode.Top)); + + public PlacementMode Placement + { + get => (PlacementMode)GetValue(PlacementProperty); + set => SetValue(PlacementProperty, value); + } + static TutorialGuide() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(TutorialGuide), new FrameworkPropertyMetadata(typeof(TutorialGuide))); + } + + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + if (GetTemplateChild("PART_NextBtn") is Button next) next.Click += (s, e) => RaiseEvent(new RoutedEventArgs(NextEvent)); + if (GetTemplateChild("PART_BackBtn") is Button back) back.Click += (s, e) => RaiseEvent(new RoutedEventArgs(BackEvent)); + if (GetTemplateChild("PART_CloseBtn") is Button close) close.Click += (s, e) => RaiseEvent(new RoutedEventArgs(CloseEvent)); + } + } + public class TutorialHighlighter : Control + { + static TutorialHighlighter() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(TutorialHighlighter), new FrameworkPropertyMetadata(typeof(TutorialHighlighter))); + } + + // 目标控件属性 + public static readonly DependencyProperty TargetElementProperty = + DependencyProperty.Register("TargetElement", typeof(FrameworkElement), typeof(TutorialHighlighter), new PropertyMetadata(null, OnTargetChanged)); + + public FrameworkElement TargetElement + { + get => (FrameworkElement)GetValue(TargetElementProperty); + set => SetValue(TargetElementProperty, value); + } + + private static void OnTargetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is TutorialHighlighter helper) helper.UpdatePosition(); + } + + public void UpdatePosition() + { + if (TargetElement == null) return; + + // 获取 TutorialLayer (也就是当前的父容器 Canvas) + var parentCanvas = VisualTreeHelper.GetParent(this) as UIElement; + if (parentCanvas == null) return; + + // 关键修改:相对于 parentCanvas 计算坐标,而不是相对于 Window + Point location = TargetElement.TranslatePoint(new Point(0, 0), parentCanvas); + + // 加上偏移量(让边框比目标稍微大一点,包围住目标) + double offset = 4; + Canvas.SetLeft(this, location.X - offset); + Canvas.SetTop(this, location.Y - offset); + + this.Width = TargetElement.ActualWidth + (offset * 2); + this.Height = TargetElement.ActualHeight + (offset * 2); + } + } + public class TutorialLayer : Canvas + { + private TutorialHighlighter _highlighter; + private TutorialGuide _guide; + + public TutorialLayer() + { + // 初始化两个组件 + _highlighter = new TutorialHighlighter(); + _guide = new TutorialGuide(); + + this.Children.Add(_highlighter); + this.Children.Add(_guide); + + // 初始隐藏 + this.Visibility = Visibility.Collapsed; + } + + public void ShowStep(FrameworkElement target, string title, string content, string step) + { + this.Visibility = Visibility.Visible; + + // 1. 更新文字 + _guide.Title = title; + _guide.Description = content; + _guide.StepText = step; + + // 2. 强制刷新布局(确保目标控件的 ActualWidth/Height 已计算) + target.UpdateLayout(); + + // 3. 定位高亮框 (Highlighter) + _highlighter.TargetElement = target; + _highlighter.UpdatePosition(); + + // 4. 定位提示框 (Guide) + // 获取高亮框在当前 Canvas 里的位置 + double hLeft = Canvas.GetLeft(_highlighter); + double hTop = Canvas.GetTop(_highlighter); + double hWidth = _highlighter.Width; + double hHeight = _highlighter.Height; + + // 默认逻辑:放在目标右侧。如果右侧放不下,放在左侧。 + double guideLeft = hLeft + hWidth + 10; + double guideTop = hTop; + + if (guideLeft + 350 > this.ActualWidth) // 350 是 TutorialGuide 的宽度 + { + guideLeft = hLeft - 350 - 10; // 放左边 + } + + Canvas.SetLeft(_guide, guideLeft); + Canvas.SetTop(_guide, guideTop); + } + public void Close() => this.Visibility = Visibility.Collapsed; + } +} \ No newline at end of file diff --git a/Melskin/Converters/Internal/ProgressToAngleConverter.cs b/Melskin/Converters/Internal/ProgressToAngleConverter.cs new file mode 100644 index 0000000..9c49868 --- /dev/null +++ b/Melskin/Converters/Internal/ProgressToAngleConverter.cs @@ -0,0 +1,62 @@ +using System.Globalization; +using System.Windows.Data; + +namespace Melskin.Converters.Internal +{ + internal class ProgressToAngleConverter : IMultiValueConverter + { + public readonly static ProgressToAngleConverter Instance = new ProgressToAngleConverter(); + + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + // 防御性检查:检查 UnsetValue 或 Null + if (values == null || values.Length < 2 || + values[0] == System.Windows.DependencyProperty.UnsetValue || values[0] == null || + values[1] == System.Windows.DependencyProperty.UnsetValue || values[1] == null) + { + return System.Windows.Media.Geometry.Empty; + } + + double value = System.Convert.ToDouble(values[0]); + double max = System.Convert.ToDouble(values[1]); + + if (max <= 0) return System.Windows.Media.Geometry.Empty; + + // 确保百分比在 0-0.9999 之间 + double percent = (value / max) <= 0 ? 0 : (value / max) >= 1 ? 0.9999 : value / max; + double angle = percent * 360; + + double size = 100; + double stroke = 10; + double center = size / 2; + double radius = (size - stroke) / 2; // 半径 45 + + double rad = (angle - 90) * Math.PI / 180; + double x = center + radius * Math.Cos(rad); + double y = center + radius * Math.Sin(rad); + + bool isLargeArc = angle > 180; + + Point startPoint = new Point(center, center - radius); + Point endPoint = new Point(x, y); + + PathFigure figure = new PathFigure { StartPoint = startPoint, IsClosed = false }; + figure.Segments.Add(new ArcSegment( + endPoint, + new Size(radius, radius), + 0, + isLargeArc, + SweepDirection.Clockwise, + true)); + + return new PathGeometry(new[] { figure }); + } + + + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Melskin/Melskin.csproj b/Melskin/Melskin.csproj index eb4f607..e0c1f98 100644 --- a/Melskin/Melskin.csproj +++ b/Melskin/Melskin.csproj @@ -16,7 +16,7 @@ WPF;Theme;Controls MIT False - True + False WPF 自定义控件库,Meld Skin AnyCPU;x64 diff --git a/Melskin/Themes/Dark.xaml b/Melskin/Themes/Dark.xaml index cfc6208..9c9204a 100644 --- a/Melskin/Themes/Dark.xaml +++ b/Melskin/Themes/Dark.xaml @@ -131,7 +131,7 @@ #24272C - #57606f + #E61A1A1A #2C3036 @@ -146,10 +146,10 @@ 用于控件的不同交互状态(正常、悬停、按压、选中、禁用) --> - #282828 + #1E2124 - #333333 + #2C2F33 #3D3D3D diff --git a/Melskin/Themes/Styles.xaml b/Melskin/Themes/Styles.xaml index 00134e7..7055ca1 100644 --- a/Melskin/Themes/Styles.xaml +++ b/Melskin/Themes/Styles.xaml @@ -42,6 +42,8 @@ + + diff --git a/MelskinTest/MainWindow.xaml b/MelskinTest/MainWindow.xaml index fd60077..d68bac0 100644 --- a/MelskinTest/MainWindow.xaml +++ b/MelskinTest/MainWindow.xaml @@ -466,6 +466,10 @@ + + + + @@ -679,8 +683,16 @@ - + + + + + + + + + - + - + Value="50" /> + + + + + + + + + + + + + + + + + + + +