最近,我编写了一个 Outlook 插件,其中包含用于额外功能区、上下文菜单等的ribbon.xml 文件。我还添加了一个停靠在窗口右侧的额外面板。
现在我开始研究如何为 Visio 创建加载项。Ribbon.xml 实际上是相同的,所以这根本不是问题。但是,当打开 Visio 文档时,我似乎找不到任何添加自定义面板的方法。
到目前为止,我在 Visio 中有这个以了解文档是否已打开/创建/更改:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
MessageBox.Show("Visio Add-In V1");
Globals.ThisAddIn.Application.DocumentChanged += new Visio.EApplication_DocumentChangedEventHandler(docChanged);
Globals.ThisAddIn.Application.DocumentOpened += new Visio.EApplication_DocumentOpenedEventHandler(docChanged);
Globals.ThisAddIn.Application.DocumentCreated += new Visio.EApplication_DocumentCreatedEventHandler(docChanged);
}
private void docChanged(Visio.Document doc)
{
MessageBox.Show("Document loaded");
}
在 Outlook 中,我会这样做来添加一个自定义面板(简化):
MyPanel ctrl = new MyPanel();
Microsoft.Office.Tools.CustomTaskPane ctp = Globals.ThisAddIn.CustomTaskPanes.Add(ctrl, title);
ctp.Visible = true;
ctp.Width = 300;
ctp.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionRight;
现在我如何能够在 Visio 2013 加载项中执行此操作?
编辑:
不幸的是,这让我认为这是不可能的:http: //msdn.microsoft.com/en-us/library/vstudio/bf08984t.aspx
编辑2:
以下答案应该有效:Visio VSTO 中是否提供任务窗格?
但是,我似乎找不到在主窗口上获取停靠面板的方法。这是我尝试过的:
Globals.ThisAddIn.Application.Windows.Add("testpanel", VisWindowStates.visWSDockedLeft, VisWinTypes.visStencilAddon, null, null, null, 300);
这会添加窗口,就好像它是一个新的绘图......
编辑3:
Visio 对此表示我有一个无效的窗口类型会引发 COM 异常。
Application.Windows.Add("testpanel", VisWindowStates.visWSDockedRight, VisWinTypes.visAnchorBarAddon, null, null, 300);