我目前正在尝试为InfoPath 2010填充程序/编辑器模式实现一个简单的加载项,它在“插入”功能区上添加了几个按钮,在单击时从另一个源插入一些“模板”数据。
它运行正常,但令我烦恼的是,当用户没有选择字段时,它会保持启用状态,而插入工具栏上的所有其他按钮以某种方式“知道”在当前上下文中无法插入任何内容因此被禁用。
关于如何与底层XDocument交互的MSDN文档是完全足够的,但我正在努力弄清楚的是如何从编辑UI进行交互或获取信息。
这就是我想要的:
我认为这会相当简单,但我花了将近一天的时间来查看我能找到的所有内容,并且已经空了!
或者我完全忽略了这一点?
答案 0 :(得分:0)
几个月后,我终于可以回答我自己的问题了。并非所有人都使用InfoPath填充程序,但万一有人这样做,这是我的解决方案:
我原来的问题有几点。
1)当用户从一个字段更改为字段时触发的事件:
事实证明,在Ribbon Button XML中将其指定为“getEnabled”属性。每当InfoPath认为可能需要启用或禁用该按钮时,它就会调用指定的函数。在我的指定:getEnabled =“OnButtonGetEnabled”,然后实现了一个小函数:
public bool OnButtonGetEnabled(Office.IRibbonControl control)
{
ribbon.Invalidate();
return HaveRichTextFieldSelected(GetContextXPath());
}
在我的情况下'ribbon'是我的Office.IRibbonUI实例。调用'Invalidate()'非常重要,否则InfoPath最终只会调用一次。
2)如何确定用户选择的字段类型。
我仍然不满意我的解决方案,但至少我现在有一些有效的方法。
我写了两个函数:
1:调用Globals.ThisAddIn.Application.ActiveWindow.XDocument.View.GetContextNodes()的GetContextXPath(),从结果构建一个XPath字符串(向后遍历DOM树)
2:HaveRichTextFieldSelected()检查清单中的指定XPath是否为'rich'类型(其DOM树位于Globals.ThisAddIn.Application.ActiveWindow.XDocument.Solution.DOM下)
无论如何,我没有发布所有涉及的代码,因为它对于SO答案来说太过分了,但是这应该给某些具有一些常识的人提供关于如何实现它的线索。