0

我目前正在尝试为 InfoPath 2010 填充器/编辑器模式实现一个简单的加载项,它在“插入”功能区上添加了一些按钮,单击该按钮会从另一个源插入一些“模板”数据。

它工作正常,但让我烦恼的是,当用户没有选择字段时,它保持启用状态,而插入工具栏上的所有其他按钮以某种方式“知道”在当前上下文中不能插入任何内容,因此被禁用。

关于如何与底层 XDocument 交互的 MSDN 文档是完全足够的,但我正在努力弄清楚如何从编辑 UI 交互或获取信息。

这就是我想要的:

  • 当用户在表单上从一个字段更改为另一个字段时触发的事件
  • 然后能够知道用户当前正在向哪种字段输入数据(即富文本、纯文本等),因此可以根据需要启用或禁用额外的按钮。

我认为这会相当简单,但我花了将近一天的时间浏览我能找到的所有东西,但结果却是空的!

还是我完全错过了这里的重点?

4

1 回答 1

0

几个月后,我终于可以回答我自己的问题了。并不是说有人使用 InfoPath 填充器,但以防万一有人这样做,这是我的解决方案:

我原来的问题有几点。

1)当用户从一个字段更改为另一个字段时触发的事件:

这在功能区按钮 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 在清单中是否为“丰富”类型(其 DOM 树位于 Globals.ThisAddIn.Application.ActiveWindow.XDocument.Solution.DOM 下)

无论如何,我不会在这里发布所有涉及的代码,因为它对于一个 SO 答案来说太多了,但这应该给一些有常识的人一个关于如何实现这个的线索。

于 2012-04-04T13:51:37.027 回答