DockableDialogs
DockableDialogs 是Revit SDK中的例子,它介绍如何在 Revit 中使用非模态的可停靠对话框。ExternalApplication 和 ExternalCommand 这个两种方式都可以使用。
** Revit SDK 链接**
例子入口
这是一个很好的如何创建自己的 Ribbon 的例子:
/// <summary>
/// Add UI for registering, showing, and hiding dockable panes.
/// </summary>
public Result OnStartup(UIControlledApplication application)
{
thisApp = this;
m_APIUtility = new APIUtility();
application.CreateRibbonTab(Globals.DiagnosticsTabName);
RibbonPanel panel = application.CreateRibbonPanel(Globals.DiagnosticsTabName, Globals.DiagnosticsPanelName);
panel.AddSeparator();
PushButtonData pushButtonRegisterPageData = new PushButtonData(Globals.RegisterPage, Globals.RegisterPage,
FileUtility.GetAssemblyFullName(), typeof(ExternalCommandRegisterPage).FullName);
pushButtonRegisterPageData.LargeImage = new BitmapImage(new Uri(FileUtility.GetApplicationResourcesPath() + "Register.png"));
PushButton pushButtonRegisterPage = panel.AddItem(pushButtonRegisterPageData) as PushButton;
pushButtonRegisterPage.AvailabilityClassName = typeof(ExternalCommandRegisterPage).FullName;
PushButtonData pushButtonShowPageData = new PushButtonData(Globals.ShowPage, Globals.ShowPage,FileUtility.GetAssemblyFullName(), typeof(ExternalCommandShowPage).FullName);
pushButtonShowPageData.LargeImage = new BitmapImage(new Uri(FileUtility.GetApplicationResourcesPath() + "Show.png"));
PushButton pushButtonShowPage = panel.AddItem(pushButtonShowPageData) as PushButton;
pushButtonShowPage.AvailabilityClassName = typeof(ExternalCommandShowPage).FullName;
PushButtonData pushButtonHidePageData = new PushButtonData(Globals.HidePage, Globals.HidePage, FileUtility.GetAssemblyFullName(), typeof(ExternalCommandHidePage).FullName);
pushButtonHidePageData.LargeImage = new BitmapImage(new Uri(FileUtility.GetApplicationResourcesPath() + "Hide.png"));
PushButton pushButtonHidePage = panel.AddItem(pushButtonHidePageData) as PushButton;
pushButtonHidePage.AvailabilityClassName = typeof(ExternalCommandHidePage).FullName;
return Result.Succeeded;
}
Ribbon 上的菜单如何和对应的命令绑定?
搜索 ExternalCommandRegisterPage
,ExternalCommandShowPage
和 ExternalCommandHidePage
。
注册
在不打开任何文档的时候,才可以调用 ExternalCommandRegisterPage
里注册,这个例子是这么做的,但是你开发的时候不一定需要这样。
这里的设置在 DockablePaneProviderData.InitialState
:
public void SetupDockablePane(Autodesk.Revit.UI.DockablePaneProviderData data)
{
data.FrameworkElement = this as FrameworkElement;
DockablePaneProviderData d = new DockablePaneProviderData();
data.InitialState = new Autodesk.Revit.UI.DockablePaneState();
data.InitialState.DockPosition = m_position;
DockablePaneId targetPane;
if (m_targetGuid == Guid.Empty)
targetPane = null;
else targetPane = new DockablePaneId(m_targetGuid);
if (m_position == DockPosition.Tabbed)
data.InitialState.TabBehind = targetPane;
if (m_position == DockPosition.Floating)
{
data.InitialState.SetFloatingRectangle(new Autodesk.Revit.DB.Rectangle(m_left, m_top, m_right, m_bottom));
}
Log.Message("***Intial docking parameters***");
Log.Message(APIUtility.GetDockStateSummary(data.InitialState));
}
显示隐藏
public void SetWindowVisibility(Autodesk.Revit.UI.UIApplication application, bool state)
{
DockablePane pane = application.GetDockablePane(Globals.sm_UserDockablePaneId);
if (pane != null)
{
if (state)
pane.Show();
else
pane.Hide();
}
}