如何通过编程引用自定义功能区,使Outlook2016自定义窗体区域显示其中
嘿,我来帮你搞定Outlook里自定义功能区和窗体区域关联的问题!你已经能在窗体区域初始化事件里获取ContactItem了,接下来只要通过VSTO的Globals对象就能轻松引用你的自定义功能区,具体步骤和代码示例如下:
引用自定义功能区并关联窗体区域
首先要明确:VSTO会把所有自定义功能区的实例托管在Globals.Ribbons集合里,每个Outlook Inspector窗口对应一个功能区实例,所以我们可以通过当前窗体所在的Inspector来精准获取对应的功能区。
代码示例(结合你的现有逻辑)
把这段代码补充到你现有的FormRegionInitializing事件处理方法里就行:
private void MapItFactory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e) { Outlook.ContactItem myItem = (Outlook.ContactItem)e.OutlookItem; // 获取当前Inspector对应的自定义功能区实例 // 把Ribbon1替换成你实际的功能区类名 var myCustomRibbon = Globals.Ribbons[e.Inspector].Ribbon1; // 现在你可以对功能区做任何操作了,比如显示特定按钮、绑定事件 // 示例:让功能区上的"MapIt"按钮可见 myCustomRibbon.btnMapIt.Visible = true; // 联动示例:点击功能区按钮时调用窗体区域的方法处理联系人地址 myCustomRibbon.btnMapIt.Click += (s, args) => { // 假设你的窗体区域控件叫MapItControl1,有个DoMap方法处理地址映射 this.MapItControl1.DoMap(myItem.BusinessAddress); }; }
额外注意事项
- 如果你的功能区是用XML而非设计器创建的,获取控件的方式要改成
GetControl方法:var mapButton = myCustomRibbon.GetControl("btnMapIt") as RibbonButton; if (mapButton != null) mapButton.Visible = true; - 更推荐在
FormRegionShowing事件里处理功能区操作,因为此时窗体区域的控件已经完全初始化,不会出现空引用问题。
内容的提问来源于stack exchange,提问作者EJ Camp
相关产品推荐
相关产品推荐

