<?xml encoding=”UTF-8″>
By
Madhukar Moogala
Here in this blog I have shown how to create a Ribbon Toggle Button using AutoCAD Ribbon Runtime API.
https://blog.autodesk.io/2015/03/23/how-to-use-toggle-button-ribbon-api/
This code sample shows how can we register a custom ribbon control on AutoCAD Ribbon bar, to illustrate I created a simple toggle button, but however this logic can be extended to any other fancy controls.
Logic:
-
Create a
ResourceDictionary
to hold resources and controls in XAML -
Implement the binding logic to manage the state of ToggleButton.
- Create a SystemVariable to hold the state of ToggleButton
<font size="2"> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return IsChecked(value); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { bool isOn = (bool)value; if (isOn && !string.IsNullOrEmpty(OnMacro)) RunMacro(OnMacro); else if (!isOn && !string.IsNullOrEmpty(OffMacro)) RunMacro(OffMacro); return DataBindings.DoNothing; }</font> -
Load this XAML in to AutoCAD Runtime, so this custom dictionary gets merged in to the AutoCAD main resource dictionary and you will see a unfied UX.
-
If you are preparing CUIX using CUI editor, make sure, the
keyof ToggleButton should be same as theIdof ToggleButton in CUI. For example “XyzToggleButton”
<font size="2"> string menuName = (string)Application.GetSystemVariable("MENUNAME");
CustomizationSection cs = new CustomizationSection(menuName + ".cuix");
var ribbonRoot = cs.MenuGroup.RibbonRoot;
var homeTab = ribbonRoot.FindTab("ID_TabHome");
var elementId = "ID_TogglePanel";
var ribbonPanelSourceReference = homeTab.Find(elementId);
if(ribbonPanelSourceReference is null)
{
var panel = homeTab.AddNewPanel(elementId, "TogglePanel");
var row = panel.AddNewRibbonRow();
row.AddNewToggleButton("XyzToggleButton", "XYZSTATEnToggle", null, RibbonButtonStyle.LargeWithText);
cs.Save();
}</font>
<font size="2"><span><</span><span>adw</span><span>:</span><span>RibbonToggleButton</span>
<span>x</span><span>:</span>Uid<span>=</span><span>"</span><span>RibbonToggleButton-Xyz</span><span>"</span>
<span>x</span><span>:</span>Key<span>=</span><span>"</span><span>XyzToggleButton</span><span>"</span>
Name<span>=</span><span>"</span><span>XYZ Toggle</span><span>"</span>
Tag<span>=</span><span>"</span><span>XYZSTATE</span><span>"</span><span>></span>
<span><</span><span>adw</span><span>:</span><span>RibbonToggleButton.IsCheckedBinding</span><span>></span>
<span><</span><span>Binding</span> Source<span>=</span><span>"</span><span>{x:Static acmgd:Application.UIBindings}</span><span>"</span> Path<span>=</span><span>"</span><span>SystemVariables[XYZSTATE].Value</span><span>"</span> Converter<span>=</span><span>"</span><span>{StaticResource XyzToggleButtonConverter}</span><span>"</span><span>/></span>
<span></</span><span>adw</span><span>:</span><span>RibbonToggleButton.IsCheckedBinding</span><span>></span>
<span><</span><span>adw</span><span>:</span><span>RibbonToggleButton.Image</span><span>></span>
<span><</span><span>BitmapImage</span> <span>x</span><span>:</span>Uid<span>=</span><span>"</span><span>BitmapImage_1</span><span>"</span> UriSource<span>=</span><span>"</span><span>Resources/Toggle.bmp</span><span>"</span> <span>/></span>
<span></</span><span>adw</span><span>:</span><span>RibbonToggleButton.Image</span><span>></span>
<span><</span><span>adw</span><span>:</span><span>RibbonToggleButton.LargeImage</span><span>></span>
<span><</span><span>BitmapImage</span> <span>x</span><span>:</span>Uid<span>=</span><span>"</span><span>BitmapImage_2</span><span>"</span> UriSource<span>=</span><span>"</span><span>Resources/Toggle.bmp</span><span>"</span><span>/></span>
<span></</span><span>adw</span><span>:</span><span>RibbonToggleButton.LargeImage</span><span>></span>
<span></</span><span>adw</span><span>:</span><span>RibbonToggleButton</span><span>></span></font>
Complete sample with source code is available at Github : SimpleToggleButton

Leave a Reply to territorial ioCancel reply