VSTO - 是不是可以同时拥有设计器和 XML 功能区?
Posted
技术标签:
【中文标题】VSTO - 是不是可以同时拥有设计器和 XML 功能区?【英文标题】:VSTO - Is it possible to have both designer and XML ribbons?VSTO - 是否可以同时拥有设计器和 XML 功能区? 【发布时间】:2013-06-17 11:03:43 【问题描述】:我正在开发一个 Outlook 2010 加载项,该加载项具有使用 Visual Studio 2010 功能区设计器创建的多个功能区。我制作了一个额外的 XML 功能区(我需要覆盖一些内置功能区按钮的默认行为,而设计器无法做到这一点)。
启用 XML 功能区会禁用所有设计器功能区,因为我必须覆盖 CreateRibbonExtensibilityObject(ContactButtonOverrides 是我的 XML 功能区):
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
return new ContactButtonOverrides();
我将覆盖“returns a RibbonManager object that represents all Ribbon (Visual Designer) items in the project”的基类实现。
有什么方法可以同时使用 XML 功能区和设计师制作的功能区吗?有没有办法将我的 XML 功能区添加到默认的 RibbonManager?
【问题讨论】:
如果您有兴趣,请提交:***.com/documentation/outlook-addin/commit 【参考方案1】:除非您使用 (2) 个单独的插件,否则无法同时使用 Ribbon Designer 和 Ribbon XML。 IAddInExtension.CreateRibbonExtensibilityObject
在加载项的生命周期内只调用一次。您可以选择使用 Designer 或 XML 路由来实现接口。它们是两个独立的 API 挂钩。
功能区设计器对于那些刚接触 Office 功能区开发的人来说更像是一个拐杖。 Once you get familiar with the Ribbon XML approach - 它更简单,您可以更好地控制行为(正如您在 OP 中指出的那样)。你可以migrate from Ribbon Designer to XML using the Context Menu from the Ribbon Designer surface - 虽然有一些rework for imagery and callbacks 因为模型完全不同。值得您花时间投资 Ribbon XML,因为它是 only way to extend Context Menus (CommandBars
are deprecated) and Backstage View as there is no designer。
Ribbon XML Route
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
return new ContactButtonOverrides();
然后在ContactButtonOverrides
...中,您可以通过IRibbonExtensibility.GetCustomUI
触发要加载的XML,Ribbon ID Type...
public string GetCustomUI(string ribbonID)
switch (ribbonID)
case "Microsoft.Outlook.Appointment" :
return GetResourceText("OutlookRibbonApp.IPM.Appointment.Ribbon.xml");
case "Microsoft.Outlook.Mail.Compose" :
return GetResourceText("OutlookRibbonApp.IPM.Note.Ribbon.xml");
default:
return "";
Ribbon Designer Route
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
if (myCondition == true)
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] new Ribbon1() );
else
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] new Ribbon2() );
【讨论】:
谢谢。正是我想知道的。 使用Application.ItemContextMenuDisplay
事件不再支持 Outlook 2013 中的上下文菜单有点麻烦,这意味着您必须切换到 XML,这意味着您也将所有功能区从设计器迁移到 XML。以上是关于VSTO - 是不是可以同时拥有设计器和 XML 功能区?的主要内容,如果未能解决你的问题,请参考以下文章