Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VSTO Ribbon Context Menu Dynamic Hierarchy

How does one create a dynamic menu hierarchy using VSTO Ribbons (for Outlook 2016)?

The xml placeholder could look like this, but I need to add/remove a menu tree under the menu root (instead of dummySingle). It seems like there would need to be something like a "getDependents" callback for menu items.

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <contextMenus>
    <contextMenu idMso="ContextMenuMailItem">
       <menu id="Menu Root" label="Menu Root" >
        <button id="dummySingle"
            label="dummy"            
            onAction="DummyAction"/>            
      </menu >      
  </contextMenus>  
</customUI>
like image 404
Jimmy Avatar asked Oct 27 '25 23:10

Jimmy


1 Answers

You would need to look at Dynamic Menus for Office Ribbon. This would be great source for you to start with: Adding Custom Dynamic Menus to the Office Fluent User Interface. Your ribbon XML will looks like ...

<dynamicMenu id="dynamicMenu1" 
                 label="Dynamic Menu" 
                 getContent="GetContent" />

And on GetContent handler you will build dynamic menu contexts, may looks like ...

public string GetContent(IRibbonControl control)
{
    StringBuilder MyStringBuilder = new StringBuilder(@"<menu xmlns=""http://schemas.microsoft.com/office/2006/01/customui"" >");
    MyStringBuilder.Append(@"<button id=""button1"" label=""Insert Text"" onAction=""OnAction""  imageMso=""SignatureLineInsert"" />");
    MyStringBuilder.Append(@"<menuSeparator id=""menusep1"" getTitle=""GetTitle"" />");
    MyStringBuilder.Append(@"<button id=""button2"" label=""Insert More Text"" onAction=""OnAction"" imageMso=""FileDocumentInspect"" />");
    MyStringBuilder.Append(@"</menu>");
    return MyStringBuilder.ToString();
}

More on Dynamic Menus: documentation for dynamicMenu

like image 124
Slava Ivanov Avatar answered Oct 29 '25 14:10

Slava Ivanov