---恢复内容开始---
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; 23 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(2DockablePaneId id,3string title,4IDockablePaneProvider provider5 )
panel1 为之前写好的UserControl1 的一个实例,UserControl1继承了IDockablePaneProvider接口。
4.最后是按钮命令代码
1 [Transaction(TransactionMode.Manual)] 2[Regeneration(RegenerationOption.Manual)] 3[Journaling(JournalingMode.NoCommandData)] 4public class Test : IExternalCommand 5{ 67 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即可看到可停靠窗口。
如果觉得《revit API 实现可停靠窗口》对你有帮助,请点赞、收藏,并留下你的观点哦!