如何定位的Outlook 2007/2010 VSTO上下文菜单按钮?(How to positio

2019-07-29 14:01发布

我有一个Outlook 2007/2010插件,我已经成功地添加了一个上下文菜单按钮,在资源管理器。 按钮本身是正确和工作正常,但是显示我无法将它定位高于上下文菜单上的内置控件,它总是被添加到了谷底。 我已创建使用VSTO 3.0同一按钮为Outlook 2003加载和相同的代码创建一个按钮处于“打开”按钮上方的上下文菜单的顶部。

我的代码如下

 void Application_ItemContextMenuDisplay(CommandBar CommandBar, Selection Selection)
    {
        if (Selection.Count != 1) return;

        CommandBarControl rootButton = CommandBar.Controls.Add(MsoControlType.msoControlButton, Type.Missing, "Create Heat Call", 1, Type.Missing);

        CommandBarButton button = (CommandBarButton)rootButton;

        button.BeginGroup = true;
        button.Tag = "CreateHeatCall";
        button.Caption = "Create Heat Call";
        button.Style = MsoButtonStyle.msoButtonIconAndCaption;
        button.Visible = true;

        button.Picture = GetImage();
        button.Mask = GetImageMask();

        selection = Selection;

        ((CommandBarButton)rootButton).Click += new _CommandBarButtonEvents_ClickEventHandler(ThisAddIn_Click);

    }

我试图玩弄的CommandBar.Controls.Add()方法没有用的“前”参数。 我怀疑的问题是,ItemContextMenuDisplay事件被解雇的其他内置控件添加到上下文菜单之前,而在一个由Explorer.CommandBars发射的方法创建的Outlook 2003的外接按钮。它不会在VSTO 4.0 Explorer对象存在的OnUpdate事件。

是否可以添加一个按钮,是不是在上下文菜单中VSTO 4.0底部的Outlook 07/10?

Answer 1:

在Outlook 2003和2007,上下文菜单是基于命令栏,并使用像你上面提供的一个代码生成。 在Outlook 2010中,上下文菜单现在功能区为基础,通常使用XML声明。

从Office 2010中的自定义上下文菜单 :

此前微软的Office 2010,以自定义是Microsoft Office Fluent Ribbon用户界面(UI)上下文(右键)菜单的唯一方法是通过使用的CommandBars解决方案。 在Office 2010中,您可以自定义内置的上下文菜单,就像你可以Ribbon UI的另一组成部分。 这种基于XML的上下文菜单扩展模型是基于熟悉的功能区扩展模型。 这意味着你可以使用相同的XML标记和您目前使用自定义Ribbon UI的回调。 此外,通过功能区用户界面的可扩展性使上下文菜单自定义不“破”以前写的命令栏的解决方案。

展望2010支持基于命令栏的控件向后兼容,但也有一些注意事项; 无法定位的控制可能是其中之一。

我的建议是让你的外接检测运行Outlook版本是否为2003/2007年或2010年,并在后者的情况下,创建基于丝带控制,而不是基于命令栏的广告。 您需要研究如何相应地调整你的代码; 例如,定位可以通过声明来执行insertBeforeMso在属性<button>元素。

PS我建议你考虑切换到商用第三方产品外接Express的Microsoft Office和.NET延长的Office应用程序的用户界面; 它极大地简化了VSTO的过程。 您还需要创建一个单独的ADXContextMenu (命令栏为主)和AdxRibbonContextMenu (功能区为主),但这个过程可能几乎完全使用直观的可视化设计器来完成。



文章来源: How to position Outlook 2007/2010 VSTO Context Menu Button?