除非您使用 (2) 单独的插件,否则无法同时使用Ribbon Designer和Ribbon XML 。IAddInExtension.CreateRibbonExtensibilityObject
仅在加载项的生命周期中调用一次。您可以选择使用Designer或XML路由来实现接口。它们是两个独立的 API 挂钩。
对于那些刚接触 Office Ribbon 开发的人来说, Ribbon Designer更像是一个拐杖。一旦您熟悉了Ribbon XML方法- 它会简单得多,并且您可以更好地控制行为(正如您在 OP 中指出的那样)。您可以使用 Ribbon Designer 表面的上下文菜单从 Ribbon Designer 迁移到 XML - 尽管由于模型完全不同,因此需要对图像和回调进行一些返工。值得您花时间在Ribbon XML上进行投资,因为它是扩展上下文菜单(CommandBars
已弃用)和 Backstage 视图的唯一方法,因为没有设计器。
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new ContactButtonOverrides();
}
然后在ContactButtonOverrides
...您可以触发要加载IRibbonExtensibility.GetCustomUI
的 XML 通过哪个传递功能区 ID 类型...
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 "";
}
}
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() });
}
}