不使用Ribbon Designer能否修改Outlook的Ribbon类型?
完全可以不使用Ribbon Designer,全手动编写代码实现Outlook不同视图下的自定义Ribbon控件加载,你找到的代码片段已经是该方案的核心逻辑。
核心原理
Outlook加载Ribbon时会调用加载项实现的GetCustomUI方法,传入当前场景对应的唯一ribbonID参数,你只需要在该方法中匹配需要自定义的场景ID,返回对应场景的Ribbon XML内容即可,不需要用到可视化的Ribbon Designer。
你要的新邮件撰写、回复、转发场景对应的Ribbon ID就是Microsoft.Outlook.Mail.Compose,和你示例代码中的判断条件完全一致。
完整手动实现步骤
- 第一步:在项目中新增Ribbon XML类型的文件,在XML中编写你需要的自定义标签页、按钮、回调方法等所有Ribbon结构定义,不要选择Ribbon(可视化设计器)类型的项。
- 第二步:实现
IRibbonExtensibility接口,该接口仅需要实现GetCustomUI方法,参考你找到的示例代码逻辑:
public string GetCustomUI(string ribbonID) { string ribbonXML = String.Empty; // 匹配邮件撰写场景的Ribbon ID if (ribbonID == "Microsoft.Outlook.Mail.Compose") { // 读取你编写好的Ribbon XML文件内容返回 ribbonXML = GetResourceText("你的项目命名空间.你的Ribbon XML文件名.xml"); } // 其他不需要自定义的场景返回空字符串即可,不会加载自定义控件 return ribbonXML; }
- 第三步:在
ThisAddIn类中重写CreateRibbonExtensibilityObject方法,返回你实现了IRibbonExtensibility接口的类的实例,告知Outlook使用你自定义的Ribbon加载逻辑。 - 第四步:在实现
IRibbonExtensibility的类中编写所有Ribbon XML中定义的回调方法,比如按钮点击触发的onAction方法,方法签名需要符合Office Ribbon回调的规范。
补充说明
如果你需要在更多Outlook视图下加载自定义控件,只需要在
GetCustomUI方法中增加对应ribbonID的判断分支即可,比如邮件阅读视图对应Microsoft.Outlook.Mail.Read,主收件箱视图对应Microsoft.Outlook.Explorer。
内容的提问来源于stack exchange,提问作者buks
相关产品推荐
相关产品推荐

