如何定位 Outlook 2007/2010 VSTO 上下文菜单按钮
本文关键字:2010 VSTO 上下文 按钮 菜单 2007 Outlook 何定位 定位 | 更新日期: 2023-09-27 18:35:37
我有一个 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()方法的"Before"参数,但无济于事。我怀疑问题是在其他内置控件添加到上下文菜单之前触发了 ItemContextMenuDisplay 事件,而 Outlook 2003 加载项按钮是在由 Explorer.CommandBars.OnUpdate 事件触发的方法中创建的,该事件在 VSTO 4.0 资源管理器对象中不存在。
是否可以添加不在 VSTO 4.0 for Outlook 07/10 上下文菜单底部的按钮?
> 在 Outlook 2003 和 2007 中,上下文菜单是基于命令栏的,并使用上面提供的代码创建。在 Outlook 2010 中,上下文菜单现在基于功能区,并且通常使用 XML 声明。
从 Office 2010 中的自定义上下文菜单:
在 Office 2010 Microsoft之前,在 Office Fluent 功能区用户界面 (UI) Microsoft中自定义上下文(右键单击)菜单的唯一方法是使用 CommandBars 解决方案。在 Office 2010 中,您可以自定义内置上下文菜单,就像自定义功能区 UI 的其他组件一样。此基于 XML 的上下文菜单扩展性模型基于熟悉的功能区扩展性模型。这意味着您可以使用当前用于自定义功能区 UI 的相同 XML 标记和回调。此外,通过功能区 UI 扩展性启用上下文菜单自定义不会"中断"以前编写的命令栏解决方案。
Outlook 2010 支持基于 CommandBar 的控件的向后兼容性,但有一些注意事项;无法定位控件可能是其中之一。
我的建议是让您的外接程序检测正在运行的 Outlook 版本是 2003/2007 还是 2010,如果是后者,请创建基于功能区的控件而不是基于 CommandBar 的控件。您将需要研究如何相应地调整代码;例如,可以通过在<button>
元素中声明insertBeforeMso
属性来执行定位。
附言我鼓励您考虑切换到商业第三方产品 Addin Express for Microsoft Office 和 .NET 来扩展 Office 应用程序的 UI;它大大简化了VSTO的过程。您仍然需要创建单独的ADXContextMenu
(基于 CommandBar)和AdxRibbonContextMenu
(基于功能区),但该过程几乎可以完全使用直观的可视化设计器来完成。