我在ExcelDNA中创建了一个自定义功能区(扩展ExcelRibbon)并重写了GetCustomUI()方法,以便从字符串列表中创建菜单控件.基本上:
public override string GetCustomUI(string RibbonID) { string customUIXml = @""; return customUIXml; }
因为_ItemNameList
从不同的文件/系统检索,我不能将此customUI标记直接放入.dna文件(据我所知),因此我通过GetCustomUI()在加载时构建它.
作为概念验证,该onAction
方法将_ItemNameList
在用户单击菜单项时添加新项.
但是如何让Excel再次调用GetCustomUI以重建XML?
我已尝试使功能区对象本身无效,但这不会触发Excel再次调用GetCustomUI.
我能想到的下一个最好的事情(虽然我还要测试它)是创建一个菜单,其中包含大量不可见的"占位符"按钮(通过指定getVisible回调),当用户点击按钮时,使需要现在变为可见的按钮无效,显示添加到的新项目_ItemNameList
.我仍然需要考虑如何获得正确的按钮参考...这也感觉有点脏.
任何想法如何让Excel重建功能区?还可以打开其他想法,以便我可以在ExcelRibbon的菜单中添加项目.
我认为您正在寻找dynamicMenu
控件,它会触发一个事件,让您每次单击它时动态设置菜单的内容.
像这样的东西:
OnGetContent
每次用户单击功能区按钮时,您的方法都会被触发,因此您可以动态组合项目.
例如
public string OnGetContent(IRibbonControl control) { var menuXml = @" "; return menuXml; }
当然,您必须从列表中动态构建此字符串等.