C# Outlook Mailitem ContextMenu 和 Ribbon 不能一起工作(只能单独使用)
C# Outlook Mailitem ContextMenu and Ribbon do not work together (only separately)
我需要创建一个 Outlook 加载项,其中功能区将在工具栏和上下文菜单上工作(右键单击 mailitem)。
一开始,这两件事我都是在不同的项目中分别做的。
在 1 个项目中,我添加了 Ribbon(视觉设计)。启动后效果很好
在 2 项目中,我想为邮件做上下文菜单。
在classThisAddIn.cs中添加:
protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new OutlookAddInExtensibility();
}
然后我添加 class OutlookAddInExtensibility.cs:
[ComVisible(true)]
public class OutlookAddInExtensibility : IRibbonExtensibility
{
public string GetCustomUI(string RibbonID)
{
return
@"<?xml version=""1.0"" encoding=""UTF-8""?>
<customUI xmlns=""http://schemas.microsoft.com/office/2009/07/customui"">
<contextMenus>
<contextMenu idMso=""ContextMenuMailItem"">
<button
id=""MyContextMenuMailItem""
label=""My new button label""
onAction=""RibbonMenuClick""
/>
</contextMenu>
</contextMenus>
</customUI>
";
}
public void RibbonMenuClick(IRibbonControl control)
{
MessageBox.Show("Show text");
}
启动后效果很好
不幸的是,当我在一个项目中添加这两个东西时 - 只有 ContectMenu 起作用。顶部的功能区未显示。
有谁知道这个问题的解决方法吗?
您需要选择一种方式来自定义 UI - 将 Visual Studio 中设计的功能区 UI 导出到功能区 XML 文件中,然后将它们组合在一起.不要忘记根据传递给 GetCustomUI
方法的 RibbonID
参数 return 适当的标记。
在 Office 应用程序(在 VSTO 中)中创建自定义 UI 有两种方法:
- Walkthrough: Create a custom tab by using the Ribbon Designer
- Walkthrough: Create a custom tab by using Ribbon XML
由于 VSTO 功能区设计器不提供和支持您需要将现有 UI 导出到 XML 并继续处理它的所有功能区功能。
有关详细信息,请参阅 How to: Export a ribbon from the Ribbon Designer to Ribbon XML。
感谢@Eugene Astafiev 的帮助,我找到了解决方案。将 RibbonVisualDesigner 导出到 XML。并将代码从 ContextMenu 添加到 XML。二合一:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab id="testTab" label="Test Label">
<group id="testGroup" label="test">
<button id="testButton" onAction="testAction" label="Test" size="large"
getImage ="GetCustomImage" screentip="Test Ribbon Functionality."/>
</group>
</tab>
</tabs>
</ribbon>
<contextMenus>
<contextMenu idMso="ContextMenuMailItem">
<button idMso="FontDialog" visible="false" />
<toggleButton id="MyToggle" label="My Toggle Button" />
<button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
<menuSeparator id="MySeparator" />
<menu id="MySubMenu" label="My Submenu" >
<button id="MyButton2" label="Button on submenu" />
</menu>
<gallery id="galleryOne" label="My Gallery">
<item id="item1" imageMso="HappyFace" />
<item id="item2" imageMso="HappyFace" />
<item id="item3" imageMso="HappyFace" />
<item id="item4" imageMso="HappyFace" />
</gallery>
<dynamicMenu id="MyDynamicMenu" label= "My Dynamic Menu" getContent="GetMyContent" />
</contextMenu>
</contextMenus>
</customUI>
我需要创建一个 Outlook 加载项,其中功能区将在工具栏和上下文菜单上工作(右键单击 mailitem)。
一开始,这两件事我都是在不同的项目中分别做的。
在 1 个项目中,我添加了 Ribbon(视觉设计)。启动后效果很好
在 2 项目中,我想为邮件做上下文菜单。 在classThisAddIn.cs中添加:
protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new OutlookAddInExtensibility();
}
然后我添加 class OutlookAddInExtensibility.cs:
[ComVisible(true)]
public class OutlookAddInExtensibility : IRibbonExtensibility
{
public string GetCustomUI(string RibbonID)
{
return
@"<?xml version=""1.0"" encoding=""UTF-8""?>
<customUI xmlns=""http://schemas.microsoft.com/office/2009/07/customui"">
<contextMenus>
<contextMenu idMso=""ContextMenuMailItem"">
<button
id=""MyContextMenuMailItem""
label=""My new button label""
onAction=""RibbonMenuClick""
/>
</contextMenu>
</contextMenus>
</customUI>
";
}
public void RibbonMenuClick(IRibbonControl control)
{
MessageBox.Show("Show text");
}
启动后效果很好
不幸的是,当我在一个项目中添加这两个东西时 - 只有 ContectMenu 起作用。顶部的功能区未显示。
有谁知道这个问题的解决方法吗?
您需要选择一种方式来自定义 UI - 将 Visual Studio 中设计的功能区 UI 导出到功能区 XML 文件中,然后将它们组合在一起.不要忘记根据传递给 GetCustomUI
方法的 RibbonID
参数 return 适当的标记。
在 Office 应用程序(在 VSTO 中)中创建自定义 UI 有两种方法:
- Walkthrough: Create a custom tab by using the Ribbon Designer
- Walkthrough: Create a custom tab by using Ribbon XML
由于 VSTO 功能区设计器不提供和支持您需要将现有 UI 导出到 XML 并继续处理它的所有功能区功能。
有关详细信息,请参阅 How to: Export a ribbon from the Ribbon Designer to Ribbon XML。
感谢@Eugene Astafiev 的帮助,我找到了解决方案。将 RibbonVisualDesigner 导出到 XML。并将代码从 ContextMenu 添加到 XML。二合一:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab id="testTab" label="Test Label">
<group id="testGroup" label="test">
<button id="testButton" onAction="testAction" label="Test" size="large"
getImage ="GetCustomImage" screentip="Test Ribbon Functionality."/>
</group>
</tab>
</tabs>
</ribbon>
<contextMenus>
<contextMenu idMso="ContextMenuMailItem">
<button idMso="FontDialog" visible="false" />
<toggleButton id="MyToggle" label="My Toggle Button" />
<button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
<menuSeparator id="MySeparator" />
<menu id="MySubMenu" label="My Submenu" >
<button id="MyButton2" label="Button on submenu" />
</menu>
<gallery id="galleryOne" label="My Gallery">
<item id="item1" imageMso="HappyFace" />
<item id="item2" imageMso="HappyFace" />
<item id="item3" imageMso="HappyFace" />
<item id="item4" imageMso="HappyFace" />
</gallery>
<dynamicMenu id="MyDynamicMenu" label= "My Dynamic Menu" getContent="GetMyContent" />
</contextMenu>
</contextMenus>
</customUI>