I have a custom ribbon with several checkboxes within a menu:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab id="ribbon" label="Ribbon">
<group id="ribbonGroup" label="Group">
<menu id="menu" label="Menu">
<checkBox id="checkbox1" label="Checkbox 1" visible="true" onAction="OnCheckboxChanged"/>
<checkBox id="checkbox2" label="Checkbox 2" visible="true" onAction="OnCheckboxChanged"/>
<checkBox id="checkbox2" label="Checkbox 2" visible="true" onAction="OnCheckboxChanged"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
This is the respective C# code:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using Office = Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;
namespace ExcelAddIn1
{
[ComVisible(true)]
public class SSRRibbon : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
public SSRRibbon()
{
}
#region IRibbonExtensibility-Member
public string GetCustomUI(string ribbonID)
{
return GetResourceText("ExcelAddIn1.SSRRibbon.xml");
}
#endregion
#region ribbon callback functions
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
}
public void OnCheckboxChanged(Office.IRibbonControl control)
{
int i = 1;
}
#endregion
#region auxiliary
private static string GetResourceText(string resourceName)
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] resourceNames = asm.GetManifestResourceNames();
for (int i = 0; i < resourceNames.Length; ++i)
{
if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
{
using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
{
if (resourceReader != null)
{
return resourceReader.ReadToEnd();
}
}
}
}
return null;
}
#endregion
}
}
However, OnCheckboxChanged is never called. It works fine when I use this callback function with buttons but it does not with checkboxes, neither in the menu nor directly in the ribbon group. It also does work with getPressed instead of onAction.