<?xml encoding=”UTF-8″>By Balaji Ramamoorthy
If you only need a list of options to be displayed, the RibbonSplitButton should do. Here is a blog post on that. But if you need further sub items for any one of those options, the RibbonMenuButton is suitable. Here is a sample code to display the options as shown in the below screenshot :
<span>// Requires reference to AdWindows.dll</span><span> </span>
<span>using</span><span> Autodesk.Windows;</span>
<span>using</span><span> System.Drawing.Imaging;</span>
[CommandMethod(<span>"RibbonMenuButton"</span><span> )]</span>
<span>public</span><span> <span>void</span><span> RibbonMenuButton()</span></span>
<span>{</span>
RibbonControl ribbonControl
= ComponentManager.Ribbon;
RibbonTab Tab = <span>new</span><span> RibbonTab();</span>
Tab.Title = <span>"Test Ribbon"</span><span> ;</span>
Tab.Id = <span>"TESTRIBBON_TAB_ID"</span><span> ;</span>
ribbonControl.Tabs.Add(Tab);
RibbonPanelSource srcPanel
= <span>new</span><span> RibbonPanelSource();</span>
srcPanel.Title = <span>"Panel1"</span><span> ;</span>
RibbonPanel Panel = <span>new</span><span> RibbonPanel();</span>
Panel.Source = srcPanel;
Tab.Panels.Add(Panel);
RibbonMenuItem button1
= <span>new</span><span> RibbonMenuItem();</span>
button1.Text = <span>"Button1"</span><span> ;</span>
button1.ShowText = <span>true</span><span> ;</span>
button1.LargeImage
= getBitmap(Resources.Resource1.Image1, 32, 32);
button1.Image
= getBitmap(Resources.Resource1.Image1, 16, 16);
button1.CommandHandler = <span>new</span><span> MenuButtonCmdHandler();</span>
RibbonMenuItem subButton1 = <span>new</span><span> RibbonMenuItem();</span>
subButton1.Text = <span>"SubButton1"</span><span> ;</span>
subButton1.ShowText = <span>true</span><span> ;</span>
subButton1.LargeImage
= getBitmap(Resources.Resource1.Image1, 32, 32);
subButton1.Image
= getBitmap(Resources.Resource1.Image1, 16, 16);
subButton1.CommandHandler
= <span>new</span><span> MenuButtonCmdHandler();</span>
RibbonMenuItem subButton2 = <span>new</span><span> RibbonMenuItem();</span>
subButton2.Text = <span>"SubButton2"</span><span> ;</span>
subButton2.ShowText = <span>true</span><span> ;</span>
subButton2.LargeImage
= getBitmap(Resources.Resource1.Image1, 32, 32);
subButton2.Image
= getBitmap(Resources.Resource1.Image1, 16, 16);
subButton2.CommandHandler
= <span>new</span><span> MenuButtonCmdHandler();</span>
button1.Items.Add(subButton1);
button1.Items.Add(subButton2);
RibbonMenuItem button2 = <span>new</span><span> RibbonMenuItem();</span>
button2.Text = <span>"Button2"</span><span> ;</span>
button2.ShowText = <span>true</span><span> ;</span>
button2.LargeImage
= getBitmap(Resources.Resource1.Image1, 32, 32);
button2.Image
= getBitmap(Resources.Resource1.Image1, 16, 16);
button2.CommandHandler = <span>new</span><span> MenuButtonCmdHandler();</span>
RibbonMenuButton ribMenuButton
= <span>new</span><span> RibbonMenuButton();</span>
ribMenuButton.Id = <span>"ADN.RibbonMenuButton.1"</span><span> ;</span>
ribMenuButton.Text = <span>"RibbonMenuButton"</span><span> ;</span>
ribMenuButton.ShowText = <span>true</span><span> ;</span>
ribMenuButton.Size = RibbonItemSize.Large;
ribMenuButton.LargeImage
= getBitmap(Resources.Resource1.Image1, 32, 32);
ribMenuButton.Image
= getBitmap(Resources.Resource1.Image1, 16, 16);
ribMenuButton.ShowImage = <span>true</span><span> ;</span>
ribMenuButton.MaxHeight = <span>double</span><span> .PositiveInfinity;</span>
ribMenuButton.MinHeight = 0;
ribMenuButton.IsSplit = <span>true</span><span> ;</span>
ribMenuButton.IsSynchronizedWithCurrentItem = <span>true</span><span> ;</span>
ribMenuButton.Items.Add(button1);
ribMenuButton.Items.Add(button2);
srcPanel.Items.Add(ribMenuButton);
Tab.IsActive = <span>true</span><span> ;</span>
<span>}</span>
BitmapImage getBitmap(Bitmap bitmap, <span>int</span><span> height, <span>int</span><span> width)</span></span>
<span>{</span>
MemoryStream stream = <span>new</span><span> MemoryStream();</span>
bitmap.Save(stream, ImageFormat.Png);
BitmapImage bmp = <span>new</span><span> BitmapImage();</span>
bmp.BeginInit();
bmp.StreamSource = <span>new</span><span> MemoryStream(stream.ToArray());</span>
bmp.DecodePixelHeight = height;
bmp.DecodePixelWidth = width;
bmp.EndInit();
<span>return</span><span> bmp;</span>
<span>}</span>
<span>public</span><span> <span>class</span><span> MenuButtonCmdHandler </span></span>
: System.Windows.Input.ICommand
<span>{</span>
<span>public</span><span> <span>bool</span><span> CanExecute(<span>object</span><span> parameter)</span></span></span>
<span>{</span>
<span>return</span><span> <span>true</span><span> ;</span></span>
<span>}</span>
<span>public</span><span> <span>event</span><span> EventHandler CanExecuteChanged;</span></span>
<span>public</span><span> <span>void</span><span> Execute(<span>object</span><span> parameter)</span></span></span>
<span>{</span>
Document doc
= Application.DocumentManager.MdiActiveDocument;
<span>if</span><span> (parameter <span>is</span><span> RibbonMenuItem)</span></span>
<span>{</span>
RibbonMenuItem menuItem
= parameter <span>as</span><span> RibbonMenuItem;</span>
<span>if</span><span> (menuItem != <span>null</span><span> )</span></span>
<span>{</span>
doc.Editor.WriteMessage(
<span>"\nMenu Item Executed: "</span><span> </span>
+ menuItem.Text);
<span>}</span>
<span>}</span>
<span>}</span>
<span>}</span>


Leave a Reply