我正在开发一个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?
答案 0 :(得分:22)
除非您使用(2)单独的加载项,否则无法同时使用功能区设计器和功能区XML 。 IAddInExtension.CreateRibbonExtensibilityObject
仅在加载项的生命周期中调用一次。您可以选择使用 Designer 或 XML 路径来实现界面。它们是两个独立的API挂钩。
功能区设计器对于那些刚接触Office Ribbon开发的人来说更像是一个支柱。 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因为模型完全不同。值得花时间投资功能区XML ,因为它是only way to extend Context Menus (CommandBars
are deprecated) and Backstage View as there is no designer。
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new ContactButtonOverrides();
}
然后在ContactButtonOverrides
内......您可以通过IRibbonExtensibility.GetCustomUI
传递Ribbon ID Type来加载要加载的XML ...
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() });
}
}