---恢復內容開始---
1.新建類庫項目,項目中新建WPF用戶控件(UserControl)得到名為UserControl1的實例。
revit中可停靠窗口的父類為page類,同時也繼承了IDockablePaneProvider接口。
所以需要將相關地方改為圖中所示內容。
2.接下來需要在隱藏代碼中實現接口中的SetupDockablePane()函數以初始化窗口狀態。
1 public void SetupDockablePane(DockablePaneProviderData Data) 2 { 3 Data.FrameworkElement = this as FrameworkElement; 4 5 Data.InitialState = new DockablePaneState(); 6 Data.InitialState.DockPosition = DockPosition.Bottom; 7 8 }
這樣就完成了我們的UserControl1。
而且我們的窗口將出現在底部。
3.接下來在revit中注冊一個可停靠窗口(順帶添加一個命令按鈕)
1 static string path = typeof(Panel).Assembly.Location; 2 3 public Result OnStartup(UIControlledApplication application) 4 { 5 RibbonPanel ribbonPanel = application.CreateRibbonPanel("窗口"); 6 7 PushButton pushButton = ribbonPanel.AddItem(new PushButtonData 8 ( "DockPanel1","可停靠",path,"DockPanel.Test")) as PushButton; 9 10 string pageGuid = "2ab776b4-b3fc-4810-8f44-ab5f1c9f5fa8"; 11 Guid guid = new Guid(pageGuid); 12 DockablePaneId id = new DockablePaneId(guid); 13 UserControl1 panel1 = new UserControl1(); 14 application.RegisterDockablePane(id,"DockPanelTest",panel1 as IDockablePaneProvider); 15 16 return Result.Succeeded; 17 }
核心方法是
1 public void RegisterDockablePane( 2 DockablePaneId id, 3 string title, 4 IDockablePaneProvider provider 5 )
panel1 為之前寫好的UserControl1 的一個實例,UserControl1繼承了IDockablePaneProvider接口。
4.最后是按鈕命令代碼
1 [Transaction(TransactionMode.Manual)] 2 [Regeneration(RegenerationOption.Manual)] 3 [Journaling(JournalingMode.NoCommandData)] 4 public class Test : IExternalCommand 5 { 6 7 public Result Execute(ExternalCommandData commandData, ref string message, ElementSet element) 8 { 9 string pageGuid = "2ab776b4-b3fc-4810-8f44-ab5f1c9f5fa8"; 10 Guid guid = new Guid(pageGuid); 11 DockablePaneId id = new DockablePaneId(guid); 12 13 DockablePane panel = commandData.Application.GetDockablePane(id); 14 panel.Show(); 15 16 return Result.Succeeded; 17 } 18 }
5.生成成功后編寫addin文件再打開revit即可看到可停靠窗口。