From 3f62d18e4361cd1d7a49c126765d95b2ad9c8246 Mon Sep 17 00:00:00 2001
From: chr <chr@mailcom>
Date: 星期二, 04 三月 2025 08:42:07 +0800
Subject: [PATCH] 优化插件;

---
 PdmSwPlugin.Main/SwAddIn/MainControl.cs                        |    1 
 PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml          |    2 
 PdmSwPlugin.PropertySetting/PropertySettingControl.xaml.cs     |    5 
 .vs/SwPlugin/v17/DocumentLayout.backup.json                    |  310 ++++++++++-
 PdmSwPlugin.Common/Util/CustomPropertyUtil.cs                  |  106 ++-
 PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml.cs         |    8 
 PdmSwPlugin.PropertySetting/CommonSettingControl.xaml          |   30 +
 InnoSetupScript/PdmSwPlugin.iss                                |    2 
 PdmSwPlugin.Common/Interface/IActiveDocChangeHandler.cs        |    2 
 PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs       |  249 ++------
 PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs                    |    5 
 PdmSwPlugin.PropertySetting/SettingControl.xaml.cs             |   15 
 PdmSwPlugin.Main/MainControl.xaml                              |    3 
 PdmSwPlugin.Common/Style/ComboxStyle.xaml                      |    1 
 PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml       |    2 
 PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml            |    2 
 PdmSwPlugin.PDM/PdmControl.xaml.cs                             |  176 +----
 .vs/SwPlugin/v17/DocumentLayout.json                           |  321 ++++++++++-
 PdmSwPlugin.PropertySetting/Util/PropHolder.cs                 |   65 ++
 PdmSwPlugin.Common/Util/Pdm/BomTreeReader.cs                   |    2 
 PdmSwPlugin.PropertySetting/Panel/DefaultPanel.xaml.cs         |    1 
 PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml               |    2 
 PdmSwPlugin.Main/MainTab.xaml                                  |   13 
 PdmSwPlugin.MaterialSelect/SwAddIn/MaterialSelectControl.cs    |    4 
 PdmSwPlugin.DrawApprove/DrawApprove.xaml                       |    2 
 PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml.cs    |    8 
 PdmSwPlugin.PropertySetting/PdmSwPlugin.PropertySetting.csproj |    2 
 PdmSwPlugin.Common/Util/SwDMUtil.cs                            |  134 ++++
 PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml.cs       |    8 
 PdmSwPlugin.Main/Constant/PluginConst.cs                       |    2 
 PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml     |    2 
 PdmSwPlugin.PropertySetting/Util/PropSetter.cs                 |   57 ++
 PdmSwPlugin.Main/MainControl.xaml.cs                           |    1 
 PdmSwPlugin.Common/Util/UI/MultiExWindow.xaml.cs               |   20 
 PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml.cs  |    8 
 PdmSw/log4net.config                                           |    2 
 PdmSwPlugin.PDM/PdmControl.xaml                                |    2 
 37 files changed, 1,138 insertions(+), 437 deletions(-)

diff --git a/.vs/SwPlugin/v17/DocumentLayout.backup.json b/.vs/SwPlugin/v17/DocumentLayout.backup.json
index 6ae4a6d..6846227 100644
--- a/.vs/SwPlugin/v17/DocumentLayout.backup.json
+++ b/.vs/SwPlugin/v17/DocumentLayout.backup.json
@@ -3,16 +3,80 @@
   "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\swdmutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\swdmutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmsw\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maintab.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maintab.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.drawapprove\\drawaudithiscontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawaudithiscontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.drawapprove\\drawapprove.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawapprove.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\commonsettingcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maincontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maincontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\style\\linkbutton.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\style\\linkbutton.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|D:\\Workspace\\PdmSwPlugin2\\wpfui\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|solutionrelative:wpfui\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|D:\\Workspace\\PdmSwPlugin2\\wpfui\\properties\\assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|solutionrelative:wpfui\\properties\\assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
-      "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\ui\\multiexwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\ui\\multiexwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -22,44 +86,234 @@
       "DocumentGroups": [
         {
           "DockedHeight": 530,
-          "SelectedChildIndex": 1,
+          "SelectedChildIndex": 19,
           "Children": [
             {
               "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "PluginConst.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-10T03:06:44.394Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{269a02dc-6af8-11d3-bdc4-00c04f688e50}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "SwDMUtil.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "ViewState": "AgIAAEsAAAAAAAAAAAAywFcAAAAfAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-19T08:17:18.883Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "DrawAuditHisControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:34:25.024Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "MainTab.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainTab.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainTab.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainTab.xaml",
+              "RelativeToolTip": "PdmSwPlugin.Main\\MainTab.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:25:43.752Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "MainControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.Main\\MainControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:24:39.136Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "CommonSettingControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:24:14.453Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
+              "Title": "LinkButton.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-18T02:04:24.459Z"
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 1,
+              "Title": "PdmControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-14T08:10:21.941Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "log4net.config",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\log4net.config",
+              "RelativeDocumentMoniker": "PdmSw\\log4net.config",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\log4net.config",
+              "RelativeToolTip": "PdmSw\\log4net.config",
+              "ViewState": "AgIAAA8AAAAAAAAAAADwvyMAAAAkAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000601|",
+              "WhenOpened": "2025-02-14T06:58:08.237Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "AssemblyInfo.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\Properties\\AssemblyInfo.cs",
+              "RelativeDocumentMoniker": "WpfUI\\Properties\\AssemblyInfo.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\Properties\\AssemblyInfo.cs",
+              "RelativeToolTip": "WpfUI\\Properties\\AssemblyInfo.cs",
+              "ViewState": "AgIAACQAAAAAAAAAAADwvzYAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-14T06:24:49.631Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 11,
+              "Title": "MainControl.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "ViewState": "AgIAADQAAAAAAAAAAAAYwBEAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-14T06:24:33.175Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
+              "Title": "log4net.config",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\log4net.config",
+              "RelativeDocumentMoniker": "WpfUI\\log4net.config",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\log4net.config",
+              "RelativeToolTip": "WpfUI\\log4net.config",
+              "ViewState": "AgIAAAMAAAAAAAAAAAAUwBAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000601|",
+              "WhenOpened": "2025-02-14T06:23:24.263Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "MainControl.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ViewState": "AgIAACoAAAAAAAAAAAAzwDgAAAAgAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-12T08:10:40.337Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "SwAddin.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeDocumentMoniker": "PdmSw\\SwAddin.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeToolTip": "PdmSw\\SwAddin.cs",
+              "ViewState": "AgIAACoBAAAAAAAAAAAawEcBAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-12T08:00:05.533Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "BomTreeReader.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "ViewState": "AgIAALsAAAAAAAAAAAAswMcAAAAVAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-12T07:44:36.406Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "DrawApprove.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-12T01:37:15.351Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "MultiExWindow.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "ViewState": "AgIAAEUAAAAAAAAAAAA0wFwAAAA+AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-10T02:13:56.89Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
               "Title": "CommonSettingControl.xaml.cs",
               "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
               "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
               "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
               "RelativeToolTip": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
-              "ViewState": "AgIAAAoBAAAAAAAAAAD4vx0BAAAgAAAAAAAAAA==",
+              "ViewState": "AgIAAPEBAAAAAAAAAAAYwAMCAABHAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-01-02T06:15:07.965Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-02-10T00:46:05.182Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "JgjPartPanel.xaml.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "ViewState": "AgIAAF4BAAAAAAAAAAAQwIABAABGAAAAAAAAAA==",
+              "Title": "PdmControl.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ViewState": "AgIAAJwGAAAAAAAAAIBBwKwGAAAgAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-01-02T06:10:11.494Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "JgjPartPanel.xaml",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
-              "WhenOpened": "2025-01-02T06:07:52.955Z",
+              "WhenOpened": "2025-01-24T08:15:20.974Z",
               "EditorCaption": ""
             }
           ]
diff --git a/.vs/SwPlugin/v17/DocumentLayout.json b/.vs/SwPlugin/v17/DocumentLayout.json
index 6ae4a6d..2d46b2b 100644
--- a/.vs/SwPlugin/v17/DocumentLayout.json
+++ b/.vs/SwPlugin/v17/DocumentLayout.json
@@ -3,16 +3,80 @@
   "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maincontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\swdmutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\swdmutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmsw\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maintab.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maintab.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.drawapprove\\drawaudithiscontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawaudithiscontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.drawapprove\\drawapprove.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawapprove.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\commonsettingcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\maincontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\maincontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\style\\linkbutton.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\style\\linkbutton.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|D:\\Workspace\\PdmSwPlugin2\\wpfui\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|solutionrelative:wpfui\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|D:\\Workspace\\PdmSwPlugin2\\wpfui\\properties\\assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{4536570F-AD3C-4D24-870A-63C9E9CE0FED}|WpfUI\\WpfUI.csproj|solutionrelative:wpfui\\properties\\assemblyinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\pdm\\bomtreereader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\commonsettingcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
-      "RelativeMoniker": "D:0:0:{713278FD-1A24-41A4-86B7-1072E7DB9E39}|PdmSwPlugin.PropertySetting\\PdmSwPlugin.PropertySetting.csproj|solutionrelative:pdmswplugin.propertysetting\\panel\\jgjpartpanel.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+      "AbsoluteMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|D:\\Workspace\\PdmSwPlugin2\\pdmswplugin.common\\util\\ui\\multiexwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{E17EF6B6-EE83-45AA-B0C0-E3A097089E97}|PdmSwPlugin.Common\\PdmSwPlugin.Common.csproj|solutionrelative:pdmswplugin.common\\util\\ui\\multiexwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -22,45 +86,234 @@
       "DocumentGroups": [
         {
           "DockedHeight": 530,
-          "SelectedChildIndex": 1,
+          "SelectedChildIndex": 12,
           "Children": [
             {
               "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "PluginConst.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\Constant\\PluginConst.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-10T03:06:44.394Z"
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 1,
+              "Title": "PdmControl.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ViewState": "AgIAAJ0GAAAAAAAAAAAkwKwGAAAgAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-01-24T08:15:20.974Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{269a02dc-6af8-11d3-bdc4-00c04f688e50}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "SwDMUtil.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Util\\SwDMUtil.cs",
+              "ViewState": "AgIAAEsAAAAAAAAAAAAywFcAAAAfAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-19T08:17:18.883Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "DrawAuditHisControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawAuditHisControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:34:25.024Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "MainTab.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainTab.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainTab.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainTab.xaml",
+              "RelativeToolTip": "PdmSwPlugin.Main\\MainTab.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:25:43.752Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
+              "Title": "MainControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.Main\\MainControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:24:39.136Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "CommonSettingControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-19T01:24:14.453Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 11,
+              "Title": "LinkButton.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Style\\LinkButton.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-18T02:04:24.459Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "PdmControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-14T08:10:21.941Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "log4net.config",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\log4net.config",
+              "RelativeDocumentMoniker": "PdmSw\\log4net.config",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\log4net.config",
+              "RelativeToolTip": "PdmSw\\log4net.config",
+              "ViewState": "AgIAAA8AAAAAAAAAAADwvyMAAAAkAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000601|",
+              "WhenOpened": "2025-02-14T06:58:08.237Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "AssemblyInfo.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\Properties\\AssemblyInfo.cs",
+              "RelativeDocumentMoniker": "WpfUI\\Properties\\AssemblyInfo.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\Properties\\AssemblyInfo.cs",
+              "RelativeToolTip": "WpfUI\\Properties\\AssemblyInfo.cs",
+              "ViewState": "AgIAACQAAAAAAAAAAADwvzYAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-14T06:24:49.631Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "MainControl.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\MainControl.xaml.cs",
+              "ViewState": "AgIAABsAAAAAAAAAAAAAADMAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-14T06:24:33.175Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
+              "Title": "log4net.config",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\log4net.config",
+              "RelativeDocumentMoniker": "WpfUI\\log4net.config",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\WpfUI\\log4net.config",
+              "RelativeToolTip": "WpfUI\\log4net.config",
+              "ViewState": "AgIAAAMAAAAAAAAAAAAUwBAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000601|",
+              "WhenOpened": "2025-02-14T06:23:24.263Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "MainControl.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ViewState": "AgIAACoAAAAAAAAAAAAzwDgAAAAgAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-12T08:10:40.337Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "SwAddin.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeDocumentMoniker": "PdmSw\\SwAddin.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeToolTip": "PdmSw\\SwAddin.cs",
+              "ViewState": "AgIAACoBAAAAAAAAAAAawEcBAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-12T08:00:05.533Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "BomTreeReader.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Util\\Pdm\\BomTreeReader.cs",
+              "ViewState": "AgIAALsAAAAAAAAAAAAswMcAAAAVAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-12T07:44:36.406Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "DrawApprove.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2025-02-12T01:37:15.351Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "MultiExWindow.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.Common\\Util\\UI\\MultiExWindow.xaml.cs",
+              "ViewState": "AgIAAEUAAAAAAAAAAAA0wFwAAAA+AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-02-10T02:13:56.89Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
               "Title": "CommonSettingControl.xaml.cs",
               "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
               "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
               "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
               "RelativeToolTip": "PdmSwPlugin.PropertySetting\\CommonSettingControl.xaml.cs",
-              "ViewState": "AgIAAAoBAAAAAAAAAAD4vx0BAAAgAAAAAAAAAA==",
+              "ViewState": "AgIAAPEBAAAAAAAAAAAYwAMCAABHAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-01-02T06:15:07.965Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "JgjPartPanel.xaml.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml.cs",
-              "ViewState": "AgIAAF4BAAAAAAAAAAAQwIABAABGAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-01-02T06:10:11.494Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "JgjPartPanel.xaml",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "RelativeDocumentMoniker": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "RelativeToolTip": "PdmSwPlugin.PropertySetting\\Panel\\JgjPartPanel.xaml",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
-              "WhenOpened": "2025-01-02T06:07:52.955Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-02-10T00:46:05.182Z"
             }
           ]
         }
diff --git a/InnoSetupScript/PdmSwPlugin.iss b/InnoSetupScript/PdmSwPlugin.iss
index 23494a5..b5d9777 100644
--- a/InnoSetupScript/PdmSwPlugin.iss
+++ b/InnoSetupScript/PdmSwPlugin.iss
@@ -7,7 +7,7 @@
 ; 自动更新程序路径
 #define AutoUpdaterDir = "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\AutoUpdater\"
 ; 版本
-#define Version = "_0.0.0.45_审核质量"
+#define Version = "_0.0.0.46_工程图引用问题"
 
 ; 生成的Installer存放路径
 #define OutPutDir = "Z:\Output"
diff --git a/PdmSw/log4net.config b/PdmSw/log4net.config
index 516b83f..60c615e 100644
--- a/PdmSw/log4net.config
+++ b/PdmSw/log4net.config
@@ -31,7 +31,7 @@
 	</appender>
 
 	<root>
-		<level value="INFO" />
+		<level value="DEBUG" />
 		<appender-ref ref="Console" />
 		<appender-ref ref="RollingFile" />
 	</root>
diff --git a/PdmSwPlugin.Common/Interface/IActiveDocChangeHandler.cs b/PdmSwPlugin.Common/Interface/IActiveDocChangeHandler.cs
index 7749970..711155e 100644
--- a/PdmSwPlugin.Common/Interface/IActiveDocChangeHandler.cs
+++ b/PdmSwPlugin.Common/Interface/IActiveDocChangeHandler.cs
@@ -32,5 +32,7 @@
         void OnDocDestroy(ModelDoc2 doc);
 
         void AfterDocDestroy();
+
+        void DisabledHandler();
     }
 }
diff --git a/PdmSwPlugin.Common/Style/ComboxStyle.xaml b/PdmSwPlugin.Common/Style/ComboxStyle.xaml
index bb9bc33..0e62472 100644
--- a/PdmSwPlugin.Common/Style/ComboxStyle.xaml
+++ b/PdmSwPlugin.Common/Style/ComboxStyle.xaml
@@ -9,6 +9,7 @@
                     <Grid>
                         <!-- 涓嬫媺鎸夐挳 -->
                         <ToggleButton x:Name="ToggleButton" Grid.Column="2" Focusable="false" ClickMode="Press"
+                                      FontSize="16"
                                    HorizontalContentAlignment="Stretch"
                                    IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
                             <Grid>
diff --git a/PdmSwPlugin.Common/Util/CustomPropertyUtil.cs b/PdmSwPlugin.Common/Util/CustomPropertyUtil.cs
index 79b7a5a..e3172ba 100644
--- a/PdmSwPlugin.Common/Util/CustomPropertyUtil.cs
+++ b/PdmSwPlugin.Common/Util/CustomPropertyUtil.cs
@@ -1,5 +1,6 @@
 锘縰sing SolidWorks.Interop.sldworks;
 using SolidWorks.Interop.swconst;
+using System;
 using System.Collections.Generic;
 
 namespace PdmSwPlugin.Common.Util
@@ -31,53 +32,6 @@
             }
         }
 
-        /// <summary>
-        /// 鑾峰彇鏂囨。灞炴��
-        /// </summary>
-        /// <param name="currentModelDoc">鏂囨。</param>
-        /// <param name="needResolve">鏄惁杞崲鍊�</param>
-        /// <param name="skipName">璺宠繃鐨刵ame</param>
-        /// <returns></returns>
-        public static Dictionary<string, string> GetCustomProperties2(ModelDoc2 currentModelDoc,
-            bool needResolve,
-            HashSet<string> skipName = null)
-        {
-            CustomPropertyManager customPropertyManager = GetCustomPropertyManager(currentModelDoc);
-            if (customPropertyManager == null)
-            {
-                return null;
-            }
-
-            Dictionary<string, string> Properties = new Dictionary<string, string>();
-            string[] names = customPropertyManager.GetNames();
-            if (names == null)
-            {
-                return Properties;
-            }
-            foreach (string name in names)
-            {
-                if (customPropertyManager.Get6(name, false, out string valueOut, out string resolvedValueOut, out _, out _)
-                    != (int)swCustomInfoGetResult_e.swCustomInfoGetResult_NotPresent)
-                {
-                    string value = (needResolve && (skipName == null || !skipName.Contains(name))) ? resolvedValueOut : valueOut;
-                    Properties[name] = value;
-                }
-            }
-            return Properties;
-        }
-
-        public static bool SaveDoc(ModelDoc2 doc, Dictionary<string, string> props, ref int err, ref int warn)
-        {
-            SetCustomProperties(doc, props);
-            if (doc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_AvoidRebuildOnSave,
-                    ref err, ref warn))
-            {
-                return true;
-            }
-            return false;
-        }
-
-
         public static Dictionary<string, string> GetCustomProperties(ModelDoc2 currentModelDoc,
             bool needResolve,
             HashSet<string> skipValue = null)
@@ -106,6 +60,53 @@
             return Properties;
         }
 
+        /// <summary>
+        /// 鑾峰彇鏂囨。灞炴��
+        /// </summary>
+        /// <param name="currentModelDoc">鏂囨。</param>
+        /// <param name="needResolve">鏄惁杞崲鍊�</param>
+        /// <param name="skipName">璺宠繃鐨刵ame</param>
+        /// <returns></returns>
+        public static Dictionary<string, string> GetCustomProperties2(ModelDoc2 currentModelDoc,
+            bool needResolve, 
+            HashSet<string> skipName,
+            HashSet<string> skipResolveName)
+        {
+            CustomPropertyManager customPropertyManager = GetCustomPropertyManager(currentModelDoc);
+            if (customPropertyManager == null)
+            {
+                return null;
+            }
+
+            Dictionary<string, string> Properties = new Dictionary<string, string>();
+            string[] names = customPropertyManager.GetNames();
+            if (names == null)
+            {
+                return Properties;
+            }
+            foreach (string name in names)
+            {
+                if (skipName != null && skipName.Contains(name)) continue;
+                if (customPropertyManager.Get6(name, false, out string valueOut, out string resolvedValueOut, out _, out _)
+                    != (int)swCustomInfoGetResult_e.swCustomInfoGetResult_NotPresent)
+                {
+                    string value = (needResolve && (skipResolveName == null || !skipResolveName.Contains(name))) ? resolvedValueOut : valueOut;
+                    Properties[name] = value;
+                }
+            }
+            return Properties;
+        }
+
+        public static bool SaveDoc(ModelDoc2 doc, Dictionary<string, string> props, ref int err, ref int warn)
+        {
+            SetCustomProperties(doc, props);
+            if (doc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_AvoidRebuildOnSave,
+                    ref err, ref warn))
+            {
+                return true;
+            }
+            return false;
+        }
 
         public static string GetCustomValue(this Dictionary<string, string> datas, string name, bool ignoreCase = false)
         {
@@ -181,6 +182,17 @@
             return values[5].ToString();
         }
 
+        public static string GetMassBySWDM(ModelDoc2 doc)
+        {
+            if (doc == null) return null;
+            double[] values = SwDMUtil.GetMassProperty(doc.GetPathName(), out string errMSg);
+            if (values == null)
+            {
+                return null;
+            }
+            return values[5].ToString();
+        }
+
         public static bool SetCustomProperties(ModelDoc2 doc, string key, string value)
         {
             CustomPropertyManager cpm = doc.Extension.CustomPropertyManager[""];
diff --git a/PdmSwPlugin.Common/Util/Pdm/BomTreeReader.cs b/PdmSwPlugin.Common/Util/Pdm/BomTreeReader.cs
index d0d5981..c2ed154 100644
--- a/PdmSwPlugin.Common/Util/Pdm/BomTreeReader.cs
+++ b/PdmSwPlugin.Common/Util/Pdm/BomTreeReader.cs
@@ -272,7 +272,7 @@
                 id = Guid.NewGuid().ToString(),
                 doc = doc,
                 drawingType = drawingType,
-                properties = CustomPropertyUtil.GetCustomProperties(doc, true),
+                properties = CustomPropertyUtil.GetCustomProperties2(doc, true, null, null),
                 d3FilePath = childPath,
             };
             return bomInfo;
diff --git a/PdmSwPlugin.Common/Util/SwDMUtil.cs b/PdmSwPlugin.Common/Util/SwDMUtil.cs
index a3066d6..cb5038a 100644
--- a/PdmSwPlugin.Common/Util/SwDMUtil.cs
+++ b/PdmSwPlugin.Common/Util/SwDMUtil.cs
@@ -1,5 +1,6 @@
 锘縰sing SolidWorks.Interop.swdocumentmgr;
 using System;
+using System.Collections.Generic;
 using System.Runtime.InteropServices;
 
 namespace PdmSwPlugin.Common.Util
@@ -7,7 +8,7 @@
     public class SwDMUtil
     {
         /// <summary>
-        /// 鍑屽垱鍏徃鐨� DM API 鎺堟潈鐮�
+        /// 鍏徃鐨� DM API 鎺堟潈鐮�
         /// </summary>
         public static string LinktronLicenseKey = @"SuzhouLinktronSystemsCoLtd:swdocmgr_general-11785-02051-00064-33793-08629-34307-00007-05128-58478-32321-57480-30765-00622-59999-16385-62752-47753-50558-31076-40652-29868-22926-54604-41449-54717-42289-44473-51665-47549-58701-53709-46485-03533-12733-37329-14337-29280-51290-50890-25690-25696-964";
 
@@ -76,6 +77,72 @@
             }
         }
 
+
+        /// <summary>
+        /// 鑾峰彇涓�寮犲伐绋嬪浘寮曠敤鐨�3D鍥捐矾寰�
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <param name="error1"></param>
+        /// <param name="error2"></param>
+        /// <returns></returns>
+        public static string[] GetDrawingRef2(string filePath, out string errMsg, out int[] status)
+        {
+            errMsg = null;
+            status = null;
+            try
+            {
+                string originalExt;
+                SwDmDocumentType docType = DMSldFileExtentionChecker.CheckDM(filePath, out originalExt);
+                if (docType != SwDmDocumentType.swDmDocumentDrawing)
+                {
+                    errMsg = "缁欏畾鐨勬枃妗d笉鏄竴寮犲伐绋嬪浘";
+                    throw null;
+                }
+                SwDMClassFactory swDMClassFactory = new SwDMClassFactory();
+                SwDMApplication swDMApp = swDMClassFactory.GetApplication(LinktronLicenseKey);
+                if (swDMApp == null)
+                {
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = "SwDM 鍒濆鍖栧け璐�";
+                    return null;
+                }
+                SwDMDocument23 swDoc = (SwDMDocument23)swDMApp.GetDocument(filePath, docType, true, out var error1);
+                if (swDoc == null)
+                {
+                    Marshal.ReleaseComObject(swDMApp);
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = $"SwDM 鍔犺浇鏂囨。澶辫触锛屽紓甯搞�恵error1}銆�";
+                    return null;
+                }
+                var swSearchOpt = swDMApp.GetSearchOptionObject();
+                object vBrokenRefs = null;
+                object vIsVirtuals = null;
+                object vTimeStamps = null;
+                object vIsImported = null;
+
+                string[] views = (string[])swDoc.GetAllExternalReferences5(swSearchOpt,
+                    out vBrokenRefs, out vIsVirtuals, out vTimeStamps, out vIsImported);
+                if (views == null || views.Length <= 0)
+                {
+                    Marshal.ReleaseComObject(swDoc);
+                    Marshal.ReleaseComObject(swDMApp);
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = $"閫夊畾鐨勫伐绋嬪浘涓嶅寘鍚湁鏁堢殑瑙嗗浘";
+                    return null;
+                }
+                Marshal.ReleaseComObject(swDoc);
+                Marshal.ReleaseComObject(swDMApp);
+                Marshal.ReleaseComObject(swDMClassFactory);
+                status = (int[])vBrokenRefs;
+                return views;
+            }
+            catch (Exception ex)
+            {
+                errMsg = ex.Message;
+                return null;
+            }
+        }
+
         public static double[] GetMassProperty(string filePath, out string errMsg)
         {
             try
@@ -140,5 +207,70 @@
                 return null;
             }
         }
+
+        public static Dictionary<string, string> GetProperty(string filePath, out string errMsg)
+        {
+            try
+            {
+                errMsg = null;
+                string originalExt;
+                SwDmDocumentType docType = DMSldFileExtentionChecker.CheckDM(filePath, out originalExt);
+                if (docType == SwDmDocumentType.swDmDocumentUnknown)
+                {
+                    errMsg = "鏈煡鐨勬枃妗g被鍨�";
+                    return null;
+                }
+                SwDMClassFactory swDMClassFactory = new SwDMClassFactory();
+                SwDMApplication swDMApp = swDMClassFactory.GetApplication(LinktronLicenseKey);
+                if (swDMApp == null)
+                {
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = "SwDM 鍒濆鍖栧け璐�";
+                    return null;
+                }
+                SwDMDocument17 swDoc = (SwDMDocument17)swDMApp.GetDocument(filePath, docType, true, out var error1);
+                if (swDoc == null)
+                {
+                    Marshal.ReleaseComObject(swDMApp);
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = $"SwDM 鍔犺浇鏂囨。澶辫触锛屽紓甯搞�恵error1}銆�";
+                    return null;
+                }
+                SwDMConfigurationMgr dmConfigMgr = swDoc.ConfigurationManager;
+                if (dmConfigMgr == null)
+                {
+                    Marshal.ReleaseComObject(swDoc);
+                    Marshal.ReleaseComObject(swDMApp);
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = $"鑾峰彇 ConfigurationManager 澶辫触";
+                    return null;
+                }
+                string configName = dmConfigMgr.GetActiveConfigurationName();
+                SwDMConfiguration dmConfig = dmConfigMgr.GetConfigurationByName(configName);
+                if (dmConfig == null)
+                {
+                    Marshal.ReleaseComObject(dmConfigMgr);
+                    Marshal.ReleaseComObject(swDoc);
+                    Marshal.ReleaseComObject(swDMApp);
+                    Marshal.ReleaseComObject(swDMClassFactory);
+                    errMsg = $"鑾峰彇 Configuration 澶辫触";
+                    return null;
+                }
+                Dictionary<string, string> datas = new Dictionary<string, string>();
+                string[] names = dmConfig.GetCustomPropertyNames();
+                names = swDoc.GetCustomPropertyNames();
+                foreach (string name in names)
+                {
+                    string val = swDoc.GetCustomProperty2(name, out var type);
+                    datas.Add(name, val);
+                }
+                return datas;
+            }
+            catch (Exception ex)
+            {
+                errMsg = ex.Message;
+                return null;
+            }
+        }
     }
 }
diff --git a/PdmSwPlugin.Common/Util/UI/MultiExWindow.xaml.cs b/PdmSwPlugin.Common/Util/UI/MultiExWindow.xaml.cs
index 0baccba..f5f49a5 100644
--- a/PdmSwPlugin.Common/Util/UI/MultiExWindow.xaml.cs
+++ b/PdmSwPlugin.Common/Util/UI/MultiExWindow.xaml.cs
@@ -3,8 +3,10 @@
 using System.Collections.ObjectModel;
 using System.ComponentModel;
 using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
 using System.Web.UI.WebControls.WebParts;
 using System.Windows;
+using System.Windows.Interop;
 
 namespace PdmSwPlugin.Common.Util.UI
 {
@@ -30,6 +32,16 @@
             }
         }
         #endregion
+
+        // Windows API 鍑芥暟
+        [DllImport("user32.dll", SetLastError = true)]
+        private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
+
+        private const int GWL_STYLE = -16;  // 绐楀彛鏍峰紡
+        private const int WS_MINIMIZEBOX = 0x00020000;  // 鏈�灏忓寲鎸夐挳鏍峰紡
 
         private string _title;
         public string title
@@ -74,6 +86,14 @@
 
         private void Window_Loaded(object sender, RoutedEventArgs e)
         {
+            // 鑾峰彇绐楀彛鍙ユ焺
+            IntPtr hWnd = new WindowInteropHelper(this).Handle;
+
+            // 鑾峰彇褰撳墠绐楀彛鐨勬牱寮�
+            int currentStyle = GetWindowLong(hWnd, GWL_STYLE);
+
+            // 绉婚櫎鏈�灏忓寲鎸夐挳
+            SetWindowLong(hWnd, GWL_STYLE, currentStyle & ~WS_MINIMIZEBOX);
             Dispatcher.Invoke(() =>
             {
                 table.ItemsSource = new ObservableCollection<string>(exceptions);
diff --git a/PdmSwPlugin.DrawApprove/DrawApprove.xaml b/PdmSwPlugin.DrawApprove/DrawApprove.xaml
index a33fedc..c1c168f 100644
--- a/PdmSwPlugin.DrawApprove/DrawApprove.xaml
+++ b/PdmSwPlugin.DrawApprove/DrawApprove.xaml
@@ -107,7 +107,7 @@
                 <RowDefinition Height="20"/>
             </Grid.RowDefinitions>
             
-            <ToolBarTray Grid.Row="0" DockPanel.Dock="Top" Background="#FFF" ToolBarTray.IsLocked="True" >
+            <ToolBarTray Grid.Row="0" DockPanel.Dock="Top" Background="Transparent" ToolBarTray.IsLocked="True" >
                 <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30" Background="#FFF">
                     <Button ToolTip="鍒锋柊" Content="&#xe631;鍒锋柊" FontFamily="{StaticResource iconfont}" FontSize="16"
      Click="Button_Click"/>
diff --git a/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs b/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs
index 464f6fa..28b86bd 100644
--- a/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs
+++ b/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs
@@ -584,5 +584,10 @@
         {
 
         }
+
+        public void DisabledHandler()
+        {
+            
+        }
     }
 }
diff --git a/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml b/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml
index ea0ab73..d47cf3f 100644
--- a/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml
+++ b/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml
@@ -60,7 +60,7 @@
         <Grid x:Name="sb">
             <DockPanel x:Name="content" LastChildFill="True">
 
-                <ToolBarTray DockPanel.Dock="Top" Background="#FFF" ToolBarTray.IsLocked="True" >
+                <ToolBarTray DockPanel.Dock="Top" Background="Transparent" ToolBarTray.IsLocked="True" >
                     <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30" Background="#FFF">
                         <Button ToolTip="鍒锋柊" Content="&#xe631;鍒锋柊" FontFamily="{StaticResource iconfont}" FontSize="16"
                     Click="Button_Click"/>
diff --git a/PdmSwPlugin.Main/Constant/PluginConst.cs b/PdmSwPlugin.Main/Constant/PluginConst.cs
index dbef9ca..bac1176 100644
--- a/PdmSwPlugin.Main/Constant/PluginConst.cs
+++ b/PdmSwPlugin.Main/Constant/PluginConst.cs
@@ -3,6 +3,6 @@
     public class PluginConst
     {
         public static readonly string AppId = "DF23E96F-A469-4302-8367-7FA2F798CD09";
-        public static readonly string Version = "0.0.0.45";
+        public static readonly string Version = "0.0.0.46";
     }
 }
diff --git a/PdmSwPlugin.Main/MainControl.xaml b/PdmSwPlugin.Main/MainControl.xaml
index aab11ca..40fb90d 100644
--- a/PdmSwPlugin.Main/MainControl.xaml
+++ b/PdmSwPlugin.Main/MainControl.xaml
@@ -6,8 +6,7 @@
         xmlns:local="clr-namespace:PdmSwPlugin.Main" 
         d:DataContext="{d:DesignInstance Type=local:MainControl}"
         x:Name="self"
-        mc:Ignorable="d"  
-             
+        mc:Ignorable="d"
         HorizontalAlignment="Stretch"
         HorizontalContentAlignment="Stretch"
         VerticalContentAlignment="Stretch"
diff --git a/PdmSwPlugin.Main/MainControl.xaml.cs b/PdmSwPlugin.Main/MainControl.xaml.cs
index 8f0049f..9994b0d 100644
--- a/PdmSwPlugin.Main/MainControl.xaml.cs
+++ b/PdmSwPlugin.Main/MainControl.xaml.cs
@@ -266,7 +266,6 @@
         }
 
 
-
         public void SetSwApp(SldWorks SwApp)
         {
             this.SwApp = SwApp;
diff --git a/PdmSwPlugin.Main/MainTab.xaml b/PdmSwPlugin.Main/MainTab.xaml
index 8501c1b..c6405f3 100644
--- a/PdmSwPlugin.Main/MainTab.xaml
+++ b/PdmSwPlugin.Main/MainTab.xaml
@@ -18,7 +18,18 @@
             <RowDefinition />
             <RowDefinition Height="Auto"/>
         </Grid.RowDefinitions>
-        <TabControl Grid.Row="0" x:Name="tabControl"></TabControl>
+        <TabControl Grid.Row="0" x:Name="tabControl" Background="#f0f0f0">
+            <TabControl.Resources>
+                <Style TargetType="{x:Type TabItem}">
+                    <Setter Property="FontSize" Value="16"/>
+                    <Style.Triggers>
+                        <Trigger Property="IsSelected" Value="True">
+                            <Setter Property="Background" Value="#f0f0f0"/>
+                        </Trigger>
+                    </Style.Triggers>
+                </Style>
+            </TabControl.Resources>
+        </TabControl>
         <DockPanel Grid.Row="1" Margin="0" LastChildFill="False">
             <Label DockPanel.Dock="Left" x:Name="userLabel" FontWeight="Bold" Padding="0" Margin="0,0,20,0" />
             <Button DockPanel.Dock="Left" Style="{StaticResource LinkButton}" Click="Button_Click">閫�鍑虹櫥褰�</Button>
diff --git a/PdmSwPlugin.Main/SwAddIn/MainControl.cs b/PdmSwPlugin.Main/SwAddIn/MainControl.cs
index 56b44f7..3780752 100644
--- a/PdmSwPlugin.Main/SwAddIn/MainControl.cs
+++ b/PdmSwPlugin.Main/SwAddIn/MainControl.cs
@@ -379,6 +379,7 @@
                             ActiveDocCustomPropertyChange -= handler.OnCustomPropertyChange;
                             DocDestroy -= handler.OnDocDestroy;
                             AfterDocDestroy -= handler.AfterDocDestroy;
+                            handler.DisabledHandler();
                         }
                     }
                     PluginInfos.Clear();
diff --git a/PdmSwPlugin.MaterialSelect/SwAddIn/MaterialSelectControl.cs b/PdmSwPlugin.MaterialSelect/SwAddIn/MaterialSelectControl.cs
index 253b132..76c5dc6 100644
--- a/PdmSwPlugin.MaterialSelect/SwAddIn/MaterialSelectControl.cs
+++ b/PdmSwPlugin.MaterialSelect/SwAddIn/MaterialSelectControl.cs
@@ -144,5 +144,9 @@
         {
             
         }
+
+        public void DisabledHandler()
+        {
+        }
     }
 }
diff --git a/PdmSwPlugin.PDM/PdmControl.xaml b/PdmSwPlugin.PDM/PdmControl.xaml
index 5e8492e..87e6c84 100644
--- a/PdmSwPlugin.PDM/PdmControl.xaml
+++ b/PdmSwPlugin.PDM/PdmControl.xaml
@@ -314,7 +314,7 @@
                 <RowDefinition Height="*" />
                 <RowDefinition Height="20"/>
             </Grid.RowDefinitions>
-            <ToolBarTray Grid.Row="0" Background="#FFF" ToolBarTray.IsLocked="True" >
+            <ToolBarTray Grid.Row="0" Background="Transparent" ToolBarTray.IsLocked="True">
                 <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30" Background="#FFF">
                     <Button ToolTip="鍒锋柊" Content="&#xe631;鍒锋柊" FontFamily="{StaticResource iconfont}" FontSize="16"
         Click="Refresh_Click"/>
diff --git a/PdmSwPlugin.PDM/PdmControl.xaml.cs b/PdmSwPlugin.PDM/PdmControl.xaml.cs
index e7667fb..260dd1f 100644
--- a/PdmSwPlugin.PDM/PdmControl.xaml.cs
+++ b/PdmSwPlugin.PDM/PdmControl.xaml.cs
@@ -1,5 +1,6 @@
 锘縰sing log4net;
 using Microsoft.Win32;
+using NPOI.SS.Formula.PTG;
 using NPOI.SS.UserModel;
 using NPOI.Util;
 using NPOI.XSSF.UserModel;
@@ -55,6 +56,8 @@
         private HttpClientCreator clientCreator { get; set; }
 
         private volatile PdmStatus workStatus;
+
+        private TaskFactory taskFactory = LimitedConcurrencyLevelTaskSchedulerMsn.Factory;
 
         SldWorks ISwAppSetter.SwApp => SwApp;
 
@@ -904,79 +907,6 @@
             //throw new NotImplementedException();
         }
 
-        public Dictionary<string, DrawInfo> GetAllProperties(List<string> ErrMsgs)
-        {
-            ConcurrentDictionary<string, DrawInfo> result = new ConcurrentDictionary<string, DrawInfo>();
-            PdmBom topBom = model.BomTree[0];
-            CountdownEvent counter = new CountdownEvent(1);
-            _ = ThreadPool.QueueUserWorkItem(
-                new WaitCallback(GetAll),
-                new object[] {
-                    topBom, result, counter, ErrMsgs, 0}
-                );
-            counter.Wait();
-            counter.Dispose();
-            return new Dictionary<string, DrawInfo>(result);
-        }
-
-        /// <summary>
-        /// 鑾峰彇鍏ㄩ儴灞炴��
-        /// </summary>
-        /// <param name="param"></param>
-        public void GetAll(object param)
-        {
-            object[] datas = param as object[];
-            PdmBom bom = (PdmBom)datas[0];
-            ModelDoc2 sldDoc = bom.doc;
-            Component2 component = bom.component;
-            ConcurrentDictionary<string, DrawInfo> result = (ConcurrentDictionary<string, DrawInfo>)datas[1];
-            CountdownEvent counter = (CountdownEvent)datas[2];
-            List<string> ErrMsgs = (List<string>)datas[3];
-            int level = (int)datas[4];
-            try
-            {
-                counter.TryAddCount();
-                string filepath = bom.partNo;
-
-
-                if (result.ContainsKey(filepath))
-                {
-                    return;
-                }
-
-                if (!bom.skipCheck)
-                {
-                    result[filepath] = GetSingleDrawInfo(bom);
-                }
-
-                ObservableCollection<PdmBom> children = bom.modules;
-                if (children != null)
-                {
-                    foreach (PdmBom child in children)
-                    {
-                        _ = ThreadPool.QueueUserWorkItem(
-                              new WaitCallback(GetAll),
-                              new object[] { child, result, counter, ErrMsgs, 1 });
-                    }
-                }
-                MaskAdorner.ShowMessage(content, filepath);
-            }
-            catch (Exception e)
-            {
-                bom.drawInfo.checkRuleResult = 2;
-                bom.drawInfo.errMessages = new List<string> { e.Message };
-                Logger.Error($"V{PdmUser.LoginUser.pluginVersion},[{bom.filePath}] Read MASS Properies Failed.", e);
-            }
-            finally
-            {
-                counter.Signal();
-                if (level == 0)
-                {
-                    counter.Signal();
-                }
-            }
-        }
-
         /// <summary>
         /// 澶勭悊璐ㄩ噺锛屼繚鐣�6浣嶅皬鏁�
         /// </summary>
@@ -1028,7 +958,10 @@
             }
             // 鏂囦欢淇濆瓨鐘舵��
             allProperties["鍥剧焊淇濆瓨鐘舵��"] = sldDoc.GetSaveFlag().ToString();
-            Dictionary<string, string> properties = CustomPropertyUtil.GetCustomProperties(sldDoc, true);
+            Dictionary<string, string> properties = CustomPropertyUtil.GetCustomProperties2(sldDoc, true, new HashSet<string>
+            {
+                "閲嶉噺"
+            }, null);
             // 鍥剧焊灞炴��
             if (properties != null)
             {
@@ -1039,18 +972,39 @@
             }
             if (drawExists)
             {
-                string refPath = SwDMUtil.GetDrawingRef(drawFilePath, out string errMsg);
-                if (refPath == null)
+                string[] refs = SwDMUtil.GetDrawingRef2(drawFilePath, out string err, out int[] status);
+                string refPath = "";
+                if (refs != null && refs.Length > 0)
                 {
-                    Logger.Error($"V{PdmUser.LoginUser.pluginVersion}, [{drawFilePath}] Read slddrw Ref Path Failed.[{errMsg}]");
+                    foreach (var rf in refs)
+                    {
+                        if (string.Equals(rf, filepath, StringComparison.CurrentCultureIgnoreCase))
+                        {
+                            refPath = rf;
+                            refPath = Path.GetFileName(refPath);
+                            break;
+                        }
+                    }
                 }
                 else
                 {
-                    refPath = Path.GetFileName(refPath);
+                    Logger.Error($"V{PdmUser.LoginUser.pluginVersion}, [{drawFilePath}] Read slddrw Ref Path Failed.[{err}]");
                 }
+
+                //string refPath = SwDMUtil.GetDrawingRef(drawFilePath, out string errMsg);
+                //if (refPath == null)
+                //{
+                //    Logger.Error($"V{PdmUser.LoginUser.pluginVersion}, [{drawFilePath}] Read slddrw Ref Path Failed.[{errMsg}]");
+                //}
+                //else
+                //{
+                //    refPath = Path.GetFileName(refPath);
+                //}
                 Logger.Debug($"V{PdmUser.LoginUser.pluginVersion}锛屾枃妗h矾寰勶細銆恵filepath}銆慭r\n" +
                     $"宸ョ▼鍥捐矾寰�:銆恵drawFilePath}銆慭r\n" +
                     $"鏂囦欢鍏ㄧО锛氥�恵allProperties["鏂囦欢鍏ㄧО"]}銆慭r\n" +
+                    $"Result锛氥�恵string.Join(",", refs ?? new string[] { })}銆慭r\n" +
+                    $"Status锛氥�恵string.Join(",", status ?? new int[] { })}銆慭r\n" +
                     $"寮曠敤璺緞锛氥�恵refPath}銆�");
                 allProperties["宸ョ▼鍥惧紩鐢ㄦ枃浠�"] = refPath;
             }
@@ -1084,13 +1038,14 @@
             ConcurrentDictionary<string, DrawInfo> result = new ConcurrentDictionary<string, DrawInfo>();
             PdmBom topBom = model.BomTree[0];
             CountdownEvent counter = new CountdownEvent(1);
-            Task.Run(() =>
+            taskFactory.StartNew(() =>
             {
                 GetAllByTask(new object[] {
                 topBom, result, counter, ErrMsgs, 0 });
             });
             counter.Wait();
-            counter.Dispose();
+            // 涓嶉渶瑕佹墜鍔ㄩ噴鏀�
+            //counter.Dispose();
             return new Dictionary<string, DrawInfo>(result);
         }
 
@@ -1131,7 +1086,7 @@
                 {
                     foreach (PdmBom child in children)
                     {
-                        Task.Run(() =>
+                        taskFactory.StartNew(() =>
                         {
                             GetAllByTask(new object[] { child, result, counter, ErrMsgs, 1 });
                         });
@@ -1155,44 +1110,6 @@
             }
         }
 
-        /// <summary>
-        /// 瀵瑰綋鍓嶅睍绀虹殑BOM缁撴瀯杩涜瑙勫垯妫�鏌�
-        /// </summary>
-        /// <returns>鏄惁鍏ㄩ儴閫氳繃</returns>
-        public bool DoCheckRule(out List<string> messages)
-        {
-            messages = new List<string>();
-            bool allSuccess = true;
-            Dictionary<string, DrawInfo> properties = GetAllProperties(messages);
-            MaskAdorner.ShowMessage(content, "姝e湪璇锋眰鏁版嵁...");
-            Result<Dictionary<string, DrawInfo>> result = Client.PostSyncAction<Dictionary<string, DrawInfo>>(
-                new PdmBomParam
-                {
-                    needCheckProperties = properties
-                }, "wpf/bom/openApi/checkRule2");
-            Dictionary<string, DrawInfo> checkResult = result.HandleResult();
-            foreach (string key in properties.Keys)
-            {
-                properties[key].checkRuleResult = checkResult[key].checkRuleResult;
-                properties[key].errMessages = checkResult[key].errMessages;
-                var msgs = checkResult[key].errMessages;
-                if (!properties[key].HistoryData && !checkResult[key].checkRuleOk)
-                {
-                    // 涓嶆槸鍘嗗彶鏁版嵁骞朵笖鏈夋湭閫氳繃鐨勶紝鏍囪涓篺alse
-                    allSuccess = false;
-                }
-
-                if (!properties[key].HistoryData && msgs != null && msgs.Count > 0)
-                {
-                    foreach (string msg in msgs)
-                    {
-                        messages.Add($"鐗╂枡銆恵key}銆戞湭閫氳繃瑙勫垯妫�鏌ワ紒{msg}");
-                    }
-                }
-            }
-            return allSuccess;
-        }
-
         public bool DoCheckRuleAsync(out List<string> messages)
         {
             var temp = new List<string>();
@@ -1202,16 +1119,19 @@
             // var factory = LimitedConcurrencyLevelTaskScheduler.Factory;
             CountdownEvent counter = new CountdownEvent(properties.Count);
             int iii = 0;
+            var start = DateTime.Now;
+            Logger.Debug("DoCheckRuleAsync Start...");
             foreach (KeyValuePair<string, DrawInfo> property in properties)
             {
-                /// 杩欎釜鏂规硶鏈�蹇紝浣嗕笉濂界鎺э紝鍥犱负涓嶇煡閬撳睘鎬у瓧鍏告湁澶氬ぇ
-                Task.Run(() =>
+                /// Task.Run 杩欎釜鏂规硶鏈�蹇紝浣嗕笉濂界鎺э紝鍥犱负涓嶇煡閬撳睘鎬у瓧鍏告湁澶氬ぇ
+                /// taskFactory.StartNew 绋冲畾涓�鐐瑰悧锛�
+                taskFactory.StartNew(() =>
                 {
                     string key = property.Key;
                     iii++;
                     try
                     {
-                        Logger.Error($"{key} checking rule...");
+                        Logger.Debug($"{key} checking rule...");
                         DrawInfo checkResult;
                         Result<DrawInfo> result = Client.PostSyncAction<DrawInfo>(property.Value, "wpf/bom/openApi/checkRuleSingle");
                         checkResult = result.HandleResult();
@@ -1407,6 +1327,7 @@
             counter.Wait();
             counter.Dispose();
             messages = temp;
+            Logger.Debug($"DoCheckRuleAsync Ended in {(DateTime.Now - start).TotalMilliseconds}ms.");
             return allSuccess;
         }
 
@@ -1415,7 +1336,7 @@
             IntPtr winformWindow = Process.GetCurrentProcess().MainWindowHandle;
             if (winformWindow != null)
                 new WindowInteropHelper(exWin) { Owner = winformWindow };
-            exWin.Show();
+            exWin.ShowDialog();
         }
 
         /// <summary>
@@ -1585,7 +1506,7 @@
                     ConcurrentQueue<string> pathCache = new ConcurrentQueue<string>(boms.Select(b => b.filePath).ToList());
                     foreach (PdmBom bom in boms)
                     {
-                        Task.Run(() =>
+                        taskFactory.StartNew(() =>
                         {
                             try
                             {
@@ -1825,7 +1746,7 @@
                     if (errs.Count > 0)
                     {
                         MultiExWindow exWin = new MultiExWindow(this, "妫�鏌ョ粨鏋�", errs);
-                        exWin.ShowDialog();
+                        ShowExWindow(exWin);
                     }
                     else if (bom.checkRuleResult == 3)
                     {
@@ -2165,5 +2086,10 @@
         {
 
         }
+
+        public void DisabledHandler()
+        {
+
+        }
     }
 }
diff --git a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml
index 3d9ebbc..d394e38 100644
--- a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml
+++ b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml
@@ -3,19 +3,43 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-             mc:Ignorable="d" 
+             mc:Ignorable="d"
              d:DesignHeight="450" d:DesignWidth="800">
     <UserControl.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
                 <ResourceDictionary Source="/PdmSwPlugin.Common;component/Style/ToolBar.xaml"/>
             </ResourceDictionary.MergedDictionaries>
+
+            <Style TargetType="Button">
+                <Setter Property="FontSize" Value="16"/>
+            </Style>
+
+            <Style TargetType="UserControl">
+                <Setter Property="FontSize" Value="16"/>
+            </Style>
+
+            <Style TargetType="TextBox">
+                <Setter Property="FontSize" Value="16"/>
+            </Style>
+
+            <Style TargetType="Label">
+                <Setter Property="FontSize" Value="14"/>
+            </Style>
+
+            <Style TargetType="ComboBox">
+                <Setter Property="FontSize" Value="16"/>
+            </Style>
+
+            <Style TargetType="ComboBoxItem">
+                <Setter Property="FontSize" Value="16"/>
+            </Style>
         </ResourceDictionary>
     </UserControl.Resources>
 
     <StackPanel>
-        <ToolBarTray Background="#FFF" ToolBarTray.IsLocked="True" >
-            <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30" Background="#FFF">
+        <ToolBarTray Background="Transparent" ToolBarTray.IsLocked="True" >
+            <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30">
                 <Button ToolTip="鍒锋柊" Content="&#xe631;鍒锋柊" Click="Refresh_Click" FontSize="16"/>
 
                 <Button ToolTip="淇濆瓨" Content="&#xe60d;淇濆瓨" FontFamily="{StaticResource iconfont}" FontSize="16"
diff --git a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs
index 2ab4104..66a7d16 100644
--- a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs
@@ -25,7 +25,7 @@
 using System.IO;
 using System.Collections.ObjectModel;
 using System.Runtime.InteropServices;
-using System.Diagnostics;
+using PdmSwPlugin.PropertySetting.Util;
 
 namespace PdmSwPlugin.PropertySetting
 {
@@ -67,12 +67,16 @@
             Dictionary<string, string> datas = properties as Dictionary<string, string>;
             (container as UIElement).Dispatcher.Invoke(() =>
             {
-                var props = container.GetType().GetProperties().Where(prop => System.Attribute.IsDefined(prop, typeof(PropertySettingAttr)))
-               .ToList();
+                // PropHolder.SetPropToUI(container, datas);
 
-                foreach (var prop in props)
+                Dictionary<PropertyInfo, PropertySettingAttr> map = PropHolder.GetAttrMap(container.GetType());
+                if (map == null)
                 {
-                    PropertySettingAttr attr = prop.GetCustomAttribute<PropertySettingAttr>();
+                    return;
+                }
+                foreach (var prop in map.Keys)
+                {
+                    PropertySettingAttr attr = map[prop];
                     if (attr == null || !attr.NeedInit)
                     {
                         continue;
@@ -89,8 +93,32 @@
                         // 鍏朵粬鍐欏叆initData
                         if (initData != null) initData[name] = value;
                     }
-                    prop.SetValue(container, value);
+                    PropHolder.SetPropToUI(container, prop, value);
                 }
+
+                // var props = container.GetType().GetProperties().Where(prop => System.Attribute.IsDefined(prop, typeof(PropertySettingAttr)))
+                //.ToList();
+                // foreach (var prop in props)
+                // {
+                //     PropertySettingAttr attr = prop.GetCustomAttribute<PropertySettingAttr>();
+                //     if (attr == null || !attr.NeedInit)
+                //     {
+                //         continue;
+                //     }
+                //     string name = attr.Name;
+                //     string value = datas.Get(name, string.Empty);
+                //     if (string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(attr.defaultValue))
+                //     {
+                //         value = attr.defaultValue;
+                //         // 榛樿鍊间笉鍐欏叆initData
+                //     }
+                //     else
+                //     {
+                //         // 鍏朵粬鍐欏叆initData
+                //         if (initData != null) initData[name] = value;
+                //     }
+                //     prop.SetValue(container, value);
+                // }
             });
             return true;
         }
@@ -232,6 +260,18 @@
             this.SwApp = SwApp;
         }
 
+        public Dictionary<string, string> GetPropsWithLog(ModelDoc2 currentModelDoc,
+            bool needResolve,
+            HashSet<string> skipName,
+            HashSet<string> skipResolveName)
+        {
+            if (currentModelDoc == null) return null;
+            var start = DateTime.Now;
+            var data = CustomPropertyUtil.GetCustomProperties2(currentModelDoc, needResolve, skipName, skipResolveName);
+            Logger.Debug($"Get Props {(DateTime.Now - start).TotalMilliseconds} ms.");
+            return data;
+        }
+
         public void InitPropertyData()
         {
             try
@@ -292,7 +332,7 @@
 
         private void UpdateActiveDoc()
         {
-            long start = DateTime.Now.Millisecond;
+            var start = DateTime.Now;
             Logger.Debug("UpdateActiveDoc Start...");
             if (activeDoc != null)
             {
@@ -309,11 +349,8 @@
                     activeDoc.ClearSelection2(true);
                 }
             }
-            Logger.Debug($"UpdateActiveDoc End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms.");
-            start = DateTime.Now.Millisecond;
-            Logger.Debug("UpdateUI Start...");
+            Logger.Debug($"UpdateActiveDoc End {activeDoc?.GetPathName()} {(DateTime.Now - start).TotalMilliseconds}ms.");
             UpdateUI(activeDoc);
-            Logger.Debug($"UpdateUI End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms.");
         }
 
         /// <summary>
@@ -390,15 +427,13 @@
 
         public void UpdateUI(ModelDoc2 doc)
         {
+            var start = DateTime.Now;
+            Logger.Debug("UpdateUI Start...");
             AlertSaveWindow();
             LastReadDoc = ReadDoc;
             ReadDoc = doc;
-            Dispatcher.Invoke(() =>
-            {
-                
-                // LoadDocProperties();
-            });
             SwitchVisiable();
+            Logger.Debug($"UpdateUI End {activeDoc?.GetPathName()} {(DateTime.Now - start).TotalMilliseconds}ms.");
         }
 
         private int Ass_UserSelectionPostNotify()
@@ -433,10 +468,15 @@
         /// </summary>
         private void SwitchVisiable()
         {
-            var start = DateTime.Now.Millisecond;
+            var start = DateTime.Now;
             Logger.Debug("SwitchVisiable Start...");
-            
-            HashSet<string> skipName = new HashSet<string> {
+
+            HashSet<string> skipName = new HashSet<string>
+            {
+                NameConstant.weight
+            };
+
+            HashSet<string> skipResolveName = new HashSet<string> {
                 NameConstant.materialCode
             };
 
@@ -457,7 +497,7 @@
             else if (docType == (int)swDocumentTypes_e.swDocPART)
             {
                 ReadDocPath = ReadDoc.GetPathName();
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                properties = GetPropsWithLog(ReadDoc, true, skipName, skipResolveName);
                 string fileType = properties.Get(NameConstant.docType);
                 /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
                 {
@@ -495,7 +535,7 @@
                 else
                 {
                     // !Equals(LastReadDoc, ReadDoc)
-                    properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                    properties = GetPropsWithLog(ReadDoc, true, skipName, skipResolveName);
                     string fileType = properties.Get(NameConstant.docType);
                     /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
                     {
@@ -547,162 +587,13 @@
                 contentPanel.Children.Add(control);
             });
 
-            Logger.Debug($"SwitchVisiable End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms.");
-        }
-
-        /// <summary>
-        /// 鏍规嵁婵�娲荤殑鏂囨。绫诲瀷锛屽彉鏇村睘鎬у彲瑙�
-        /// </summary>
-        private void SwitchVisiable2()
-        {
-            HashSet<string> skipName = new HashSet<string> {
-                NameConstant.materialCode
-            };
-
-            IPropertyOpt last = ActiveOpter as IPropertyOpt;
-            string contentKey = "default";
-            int? docType = ReadDoc?.GetType();
-            UserControl control;
-            IPropertyOpt newOne;
-            Dictionary<string, string> properties;
-            if (docType == (int)swDocumentTypes_e.swDocDRAWING)
-            {
-                ReadDocPath = ReadDoc.GetPathName();
-
-                control = new DefaultPanel();
-                newOne = control as IPropertyOpt;
-                newOne.SetSettings(settings);
-                newOne.SetProperties(null, "褰撳墠涓嶆敮鎸佸伐绋嬪浘", true, out _);
-            }
-            else if (docType == (int)swDocumentTypes_e.swDocPART)
-            {
-                ReadDocPath = ReadDoc.GetPathName();
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
-                string fileType = properties.Get(NameConstant.docType);
-                /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
-                {
-                    contentKey = "jgjPart";
-                }*/
-                if (BomIniterHolder.Instance.IsJgj(ReadDoc))
-                {
-                    control = new JgjPartPanel();
-                }
-                else
-                {
-                    control = new StandardPartPanel();
-                }
-                newOne = control as IPropertyOpt;
-                newOne.SetSettings(settings);
-                newOne.SetProperties(ReadDoc, properties, true, out _);
-            }
-            else if (docType == (int)swDocumentTypes_e.swDocASSEMBLY)
-            {
-                ReadDocPath = ReadDoc.GetPathName();
-                // !Equals(LastReadDoc, ReadDoc)
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
-                string fileType = properties.Get(NameConstant.docType);
-                /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
-                {
-                    contentKey = "jgjPart";
-                }*/
-                if (BomIniterHolder.Instance.IsJgj(ReadDoc))
-                {
-                    control = new JgjModulePanel();
-                }
-                else
-                {
-                    control = new StandardModulePanel();
-                }
-                newOne = control as IPropertyOpt;
-                newOne.SetSettings(settings);
-                newOne.SetProperties(ReadDoc, properties, true, out _);
-            }
-            else
-            {
-                control = new DefaultPanel();
-                newOne = control as IPropertyOpt;
-
-                string PathName = ReadComponent?.GetPathName();
-                if (PathName == null)
-                {
-                    ReadDocPath = "";
-                    newOne.SetSettings(settings);
-                    newOne.SetProperties(ReadDoc, "璇锋墦寮�涓�涓枃妗�", true, out _);
-                }
-                else
-                {
-                    ReadDocPath = PathName;
-                    string name = Path.GetFileNameWithoutExtension(PathName);
-                    newOne.SetSettings(settings);
-                    newOne.SetProperties(ReadDoc, $"銆恵name}銆戞湭鎵惧埌鏂囨。锛岃妫�鏌ユ槸鍚﹁鍘嬬缉鎴栬交閲忓寲", true, out _);
-                }
-            }
-            if (last != null)
-            {
-                last.UpdateProperty -= Jgj_SinglePropertyChanged;
-                last = null;
-            }
-            ActiveOpter = control;
-            contentPanel.Children.Clear();
-            newOne.UpdateProperty += Jgj_SinglePropertyChanged;
-            contentPanel.Children.Add(control);
-        }
-
-        /// <summary>
-        /// 浠庢縺娲荤殑鏂囨。涓鍙栧弬鏁�
-        /// </summary>
-        private void LoadDocProperties()
-        {
-            IPropertyOpt opt = ActiveOpter as IPropertyOpt;
-            string ErrMsg = null;
-            if (ReadDoc == null)
-            {
-                string PathName = ReadComponent?.GetPathName();
-                if (PathName == null)
-                {
-                    ReadDocPath = "";
-                    opt.SetProperties(ReadDoc, "璇锋墦寮�涓�涓枃妗�", true, out ErrMsg);
-                    return;
-                }
-                ReadDocPath = PathName;
-                string name = Path.GetFileNameWithoutExtension(PathName);
-                opt.SetProperties(ReadDoc, $"銆恵name}銆戞湭鎵惧埌鏂囨。锛岃妫�鏌ユ槸鍚﹁鍘嬬缉鎴栬交閲忓寲", true, out ErrMsg);
-                return;
-            }
-            int docType = ReadDoc.GetType();
-            ReadDocPath = ReadDoc.GetPathName();
-            if (docType == (int)swDocumentTypes_e.swDocDRAWING)
-            {
-                opt.SetProperties(null, "褰撳墠涓嶆敮鎸佸伐绋嬪浘", true, out ErrMsg);
-                return;
-            }
-            HashSet<string> skipName = new HashSet<string> {
-                NameConstant.materialCode
-            };
-            Dictionary<string, string> properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
-            opt.SetProperties(ReadDoc, properties, !Equals(LastReadDoc, ReadDoc), out ErrMsg);
-        }
-
-        private void ClearDocProperties()
-        {
-            IPropertyOpt opt = ActiveOpter as IPropertyOpt;
-            opt.ClearAllProperties(out string ErrMsg);
-        }
-
-        /// <summary>
-        /// 灏嗗睘鎬ц缃繘鏂囨。锛屾敞鎰忥紝骞舵病鏈変繚瀛�
-        /// </summary>
-        /// <param name="doc">鏂囨。</param>
-        private void SetDocProperty(ModelDoc2 doc, Dictionary<string, string> props)
-        {
-            CustomPropertyUtil.SetCustomProperties(doc, props);
+            Logger.Debug($"SwitchVisiable End {activeDoc?.GetPathName()} {(DateTime.Now - start).TotalMilliseconds}ms.");
         }
 
         public void SetSwApp(SldWorks SwApp)
         {
             this.SwApp = SwApp;
         }
-
 
         private void SaveDoc(bool qiaoqiaode)
         {
@@ -735,6 +626,8 @@
         public void RefreshData()
         {
             MaskAdorner.ShowMask(content, "灞炴�у姞杞戒腑锛岃绋嶅��...");
+            var start = DateTime.Now;
+            Logger.Debug($"Refresh [{ReadDocPath}] Data start.");
             Task.Run(() =>
             {
                 try
@@ -754,6 +647,7 @@
                 finally
                 {
                     MaskAdorner.HideMask(content);
+                    Logger.Debug($"Refresh [{ReadDocPath}] Data end {(DateTime.Now - start).TotalMilliseconds}ms.");
                 }
             });
         }
@@ -792,7 +686,6 @@
         /// <param name="comp"></param>
         public void OnSwActiveDocChange(ModelDoc2 lastDoc, ModelDoc2 doc, Component2 comp)
         {
-            // CurrentChanged();
             RefreshData();
         }
 
@@ -835,7 +728,7 @@
         /// </summary>
         public void AlertSaveWindow()
         {
-            var start = DateTime.Now.Millisecond;
+            var start = DateTime.Now;
             Logger.Debug("AlertSaveWindow Start...");
             IPropertyOpt opt = ActiveOpter as IPropertyOpt;
             if (opt != null && opt.GetDocChanged())
@@ -859,7 +752,7 @@
                     opt.ResetProperty(out string errMsg);
                 }
             }
-            Logger.Debug($"AlertSaveWindow End {activeDoc?.GetPathName()} {DateTime.Now.Millisecond - start}ms.");
+            Logger.Debug($"AlertSaveWindow End {activeDoc?.GetPathName()} {(DateTime.Now - start).TotalMilliseconds}ms.");
         }
 
         public void OnTabControlSelectionChange(object sender, SelectionChangedEventArgs e)
@@ -893,5 +786,13 @@
                 this.Error($"{ex.Message}");
             }
         }
+
+        public void DisabledHandler()
+        {
+            if (activeDoc != null)
+            {
+                DetachDocNotify(activeDoc);
+            }
+        }
     }
 }
diff --git a/PdmSwPlugin.PropertySetting/Panel/DefaultPanel.xaml.cs b/PdmSwPlugin.PropertySetting/Panel/DefaultPanel.xaml.cs
index 722a8d4..03b25f4 100644
--- a/PdmSwPlugin.PropertySetting/Panel/DefaultPanel.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/Panel/DefaultPanel.xaml.cs
@@ -49,7 +49,6 @@
             set => RaiseAndSetIfChanged(ref _message, value);
         }
 
-
         public DefaultPanel()
         {
             DataContext = this;
diff --git a/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml b/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml
index 02f0d61..7e94395 100644
--- a/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml
+++ b/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml
@@ -5,7 +5,7 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              mc:Ignorable="d" 
              x:Name="self"
-             d:DesignHeight="900" d:DesignWidth="800" Background="#FFF">
+             d:DesignHeight="900" d:DesignWidth="800">
 
     <UserControl.Resources>
         <ResourceDictionary>
diff --git a/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml.cs b/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml.cs
index a69952b..c4ffaf5 100644
--- a/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/Panel/JgjModulePanel.xaml.cs
@@ -9,6 +9,7 @@
 using PdmSwPlugin.PropertySetting.Entity;
 using PdmSwPlugin.PropertySetting.Interface;
 using PdmSwPlugin.PropertySetting.Panel.Attr;
+using PdmSwPlugin.PropertySetting.Util;
 using SolidWorks.Interop.sldworks;
 using SolidWorks.Interop.swconst;
 
@@ -51,6 +52,11 @@
             }
         }
         #endregion
+
+        static JgjModulePanel()
+        {
+            PropHolder.Register(typeof(JgjModulePanel));
+        }
 
         public event PanelPropertyChanged UpdateProperty;
 
@@ -221,7 +227,7 @@
         [PropertySettingAttr(Name = NameConstant.weight, NeedSave = false)]
         public string weight
         {
-            get => CustomPropertyUtil.GetMass(doc);
+            get => CustomPropertyUtil.GetMassBySWDM(doc);
             set
             {
                 ccc(ref _weight, value);
diff --git a/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml b/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml
index e7fb6b5..3bc1fe9 100644
--- a/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml
+++ b/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml
@@ -5,7 +5,7 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              mc:Ignorable="d" 
              x:Name="self"
-             d:DesignHeight="900" d:DesignWidth="800" Background="#FFF">
+             d:DesignHeight="900" d:DesignWidth="800">
 
     <UserControl.Resources>
         <ResourceDictionary>
diff --git a/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml.cs b/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml.cs
index e7331b2..9977c5d 100644
--- a/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/Panel/JgjPartPanel.xaml.cs
@@ -9,6 +9,7 @@
 using PdmSwPlugin.PropertySetting.Entity;
 using PdmSwPlugin.PropertySetting.Interface;
 using PdmSwPlugin.PropertySetting.Panel.Attr;
+using PdmSwPlugin.PropertySetting.Util;
 using SolidWorks.Interop.sldworks;
 using SolidWorks.Interop.swconst;
 
@@ -41,6 +42,11 @@
             }
         }
         #endregion
+
+        static JgjPartPanel()
+        {
+            PropHolder.Register(typeof(JgjPartPanel));
+        }
 
         public void ccc<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
         {
@@ -198,7 +204,7 @@
         [PropertySettingAttr(Name = NameConstant.weight, NeedSave = false)]
         public string weight
         {
-            get => CustomPropertyUtil.GetMass(doc);
+            get => CustomPropertyUtil.GetMassBySWDM(doc);
             set
             {
                 ccc(ref _weight, value);
diff --git a/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml b/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml
index fb810cb..7d38708 100644
--- a/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml
+++ b/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml
@@ -6,7 +6,7 @@
              mc:Ignorable="d" 
              x:Name="self"
              VerticalContentAlignment="Stretch"
-             d:DesignHeight="900" d:DesignWidth="800" Background="#FFF">
+             d:DesignHeight="900" d:DesignWidth="800">
 
     <UserControl.Resources>
         <ResourceDictionary>
diff --git a/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml.cs b/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml.cs
index 8393031..9b5b9d1 100644
--- a/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/Panel/StandardModulePanel.xaml.cs
@@ -7,6 +7,7 @@
 using PdmSwPlugin.Common.Util;
 using PdmSwPlugin.PropertySetting.Interface;
 using PdmSwPlugin.PropertySetting.Panel.Attr;
+using PdmSwPlugin.PropertySetting.Util;
 using SolidWorks.Interop.sldworks;
 using SolidWorks.Interop.swconst;
 
@@ -39,6 +40,11 @@
             }
         }
         #endregion
+
+        static StandardModulePanel()
+        {
+            PropHolder.Register(typeof(StandardModulePanel));
+        }
 
         public event PanelPropertyChanged UpdateProperty;
 
@@ -95,7 +101,7 @@
         [PropertySettingAttr(Name = NameConstant.weight, NeedSave = false)]
         public string weight
         {
-            get => CustomPropertyUtil.GetMass(doc);
+            get => CustomPropertyUtil.GetMassBySWDM(doc);
             set
             {
                 RaiseAndSetIfChanged(ref _weight, value);
diff --git a/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml b/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml
index 192168c..bed0a65 100644
--- a/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml
+++ b/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml
@@ -6,7 +6,7 @@
              xmlns:local="clr-namespace:PdmSwPlugin.PropertySetting"
              mc:Ignorable="d" 
              x:Name="self"
-             d:DesignHeight="900" d:DesignWidth="800" Background="#FFF">
+             d:DesignHeight="900" d:DesignWidth="800">
 
     <UserControl.Resources>
         <ResourceDictionary>
diff --git a/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml.cs b/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml.cs
index ea90304..2e6c21a 100644
--- a/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/Panel/StandardPartPanel.xaml.cs
@@ -7,6 +7,7 @@
 using PdmSwPlugin.Common.Util;
 using PdmSwPlugin.PropertySetting.Interface;
 using PdmSwPlugin.PropertySetting.Panel.Attr;
+using PdmSwPlugin.PropertySetting.Util;
 using SolidWorks.Interop.sldworks;
 using SolidWorks.Interop.swconst;
 
@@ -39,6 +40,11 @@
             }
         }
         #endregion
+
+        static StandardPartPanel()
+        {
+            PropHolder.Register(typeof(StandardPartPanel));
+        }
 
         private Dictionary<string, string> InitData = new Dictionary<string, string>();
 
@@ -93,7 +99,7 @@
         [PropertySettingAttr(Name = NameConstant.weight, NeedSave = false)]
         public string weight
         {
-            get => CustomPropertyUtil.GetMass(doc);
+            get => CustomPropertyUtil.GetMassBySWDM(doc);
             set
             {
                 RaiseAndSetIfChanged(ref _weight, value);
diff --git a/PdmSwPlugin.PropertySetting/PdmSwPlugin.PropertySetting.csproj b/PdmSwPlugin.PropertySetting/PdmSwPlugin.PropertySetting.csproj
index 09ef8f2..6ed1251 100644
--- a/PdmSwPlugin.PropertySetting/PdmSwPlugin.PropertySetting.csproj
+++ b/PdmSwPlugin.PropertySetting/PdmSwPlugin.PropertySetting.csproj
@@ -139,6 +139,8 @@
     <Compile Include="Tab\JgjPartTab.xaml.cs">
       <DependentUpon>JgjPartTab.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Util\PropHolder.cs" />
+    <Compile Include="Util\PropSetter.cs" />
     <Page Include="SettingControl.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
diff --git a/PdmSwPlugin.PropertySetting/PropertySettingControl.xaml.cs b/PdmSwPlugin.PropertySetting/PropertySettingControl.xaml.cs
index b865f4c..f6646db 100644
--- a/PdmSwPlugin.PropertySetting/PropertySettingControl.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/PropertySettingControl.xaml.cs
@@ -754,5 +754,10 @@
         {
 
         }
+
+        public void DisabledHandler()
+        {
+
+        }
     }
 }
diff --git a/PdmSwPlugin.PropertySetting/SettingControl.xaml.cs b/PdmSwPlugin.PropertySetting/SettingControl.xaml.cs
index 06fb90a..9aedd83 100644
--- a/PdmSwPlugin.PropertySetting/SettingControl.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/SettingControl.xaml.cs
@@ -337,7 +337,7 @@
             else if (docType == (int)swDocumentTypes_e.swDocPART)
             {
                 ReadDocPath = ReadDoc.GetPathName();
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, null, skipName);
                 string fileType = properties.Get(NameConstant.docType);
                 /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
                 {
@@ -375,7 +375,7 @@
                 else
                 {
                     // !Equals(LastReadDoc, ReadDoc)
-                    properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                    properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, null, skipName);
                     string fileType = properties.Get(NameConstant.docType);
                     /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
                     {
@@ -451,7 +451,7 @@
             else if (docType == (int)swDocumentTypes_e.swDocPART)
             {
                 ReadDocPath = ReadDoc.GetPathName();
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, null, skipName);
                 string fileType = properties.Get(NameConstant.docType);
                 /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
                 {
@@ -473,7 +473,7 @@
             {
                 ReadDocPath = ReadDoc.GetPathName();
                 // !Equals(LastReadDoc, ReadDoc)
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, null, skipName);
                 string fileType = properties.Get(NameConstant.docType);
                 /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
                 {
@@ -553,7 +553,7 @@
             HashSet<string> skipName = new HashSet<string> {
                 NameConstant.materialCode
             };
-            Dictionary<string, string> properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+            Dictionary<string, string> properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, null, skipName);
             opt.SetProperties(ReadDoc, properties, !Equals(LastReadDoc, ReadDoc), out ErrMsg);
         }
 
@@ -711,5 +711,10 @@
                 }
             }
         }
+
+        public void DisabledHandler()
+        {
+            
+        }
     }
 }
diff --git a/PdmSwPlugin.PropertySetting/Util/PropHolder.cs b/PdmSwPlugin.PropertySetting/Util/PropHolder.cs
new file mode 100644
index 0000000..43fa3c8
--- /dev/null
+++ b/PdmSwPlugin.PropertySetting/Util/PropHolder.cs
@@ -0,0 +1,65 @@
+锘縰sing PdmSwPlugin.Common.Util;
+using PdmSwPlugin.PropertySetting.Panel;
+using PdmSwPlugin.PropertySetting.Panel.Attr;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace PdmSwPlugin.PropertySetting.Util
+{
+    public class PropHolder
+    {
+        private static readonly Dictionary<Type, Dictionary<PropertyInfo, PropertySettingAttr>> context
+            = new Dictionary<Type, Dictionary<PropertyInfo, PropertySettingAttr>>();
+
+        private static readonly Dictionary<PropertyInfo, SetValueDelegate> setters = new Dictionary<PropertyInfo, SetValueDelegate>();
+
+        public static void Register(Type type)
+        {
+
+            if (context.ContainsKey(type))
+            {
+                return;
+            }
+
+            Dictionary<PropertyInfo, PropertySettingAttr> map = new Dictionary<PropertyInfo, PropertySettingAttr>();
+
+            var props = type.GetProperties().Where(prop => System.Attribute.IsDefined(prop, typeof(PropertySettingAttr)))
+              .ToList();
+
+            foreach (var prop in props)
+            {
+                PropertySettingAttr attr = prop.GetCustomAttribute<PropertySettingAttr>();
+                if (attr == null || !attr.NeedInit)
+                {
+                    continue;
+                }
+                map.Add(prop, attr);
+                setters.Add(prop, PropSetter.CreatePropertySetter(prop));
+            }
+            context.Add(type, map);
+        }
+
+        public static Dictionary<PropertyInfo, PropertySettingAttr> GetAttrMap(Type type)
+        {
+            if (!context.ContainsKey(type))
+            {
+                return null;
+            }
+            return context[type];
+        }
+
+        public static void SetPropToUI(object container, PropertyInfo prop, object value)
+        {
+            if (setters.ContainsKey(prop))
+            {
+                setters[prop](container, value);
+            }
+        }
+    }
+}
diff --git a/PdmSwPlugin.PropertySetting/Util/PropSetter.cs b/PdmSwPlugin.PropertySetting/Util/PropSetter.cs
new file mode 100644
index 0000000..82d1a62
--- /dev/null
+++ b/PdmSwPlugin.PropertySetting/Util/PropSetter.cs
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Emit;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PdmSwPlugin.PropertySetting.Util
+{
+    public delegate void SetValueDelegate(object target, object arg);
+
+    public static class PropSetter
+    {
+        public static SetValueDelegate CreatePropertySetter(PropertyInfo property)
+        {
+            if (property == null)
+                throw new ArgumentNullException("property");
+
+            if (!property.CanWrite)
+                return null;
+
+            MethodInfo setMethod = property.GetSetMethod(true);
+
+            DynamicMethod dm = new DynamicMethod("PropertySetter", null,
+                new Type[] { typeof(object), typeof(object) }, property.DeclaringType, true);
+
+            ILGenerator il = dm.GetILGenerator();
+
+            if (!setMethod.IsStatic)
+            {
+                il.Emit(OpCodes.Ldarg_0);
+            }
+            il.Emit(OpCodes.Ldarg_1);
+
+            EmitCastToReference(il, property.PropertyType);
+            if (!setMethod.IsStatic && !property.DeclaringType.IsValueType)
+            {
+                il.EmitCall(OpCodes.Callvirt, setMethod, null);
+            }
+            else
+                il.EmitCall(OpCodes.Call, setMethod, null);
+
+            il.Emit(OpCodes.Ret);
+
+            return (SetValueDelegate)dm.CreateDelegate(typeof(SetValueDelegate));
+        }
+
+        private static void EmitCastToReference(ILGenerator il, Type type)
+        {
+            if (type.IsValueType)
+                il.Emit(OpCodes.Unbox_Any, type);
+            else
+                il.Emit(OpCodes.Castclass, type);
+        }
+    }
+}

--
Gitblit v1.9.1