如何在加载特定文档时禁用Word的内置功能区选项卡?

时间:2015-03-05 16:09:09

标签: c# ms-word vsto

我现在正在使用以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<commands>
<command idMso="Font" enabled="false"/>
<command idMso="AlignLeft" enabled="false"/>
<command idMso="AlignCenter" enabled="false"/>
<command idMso="AlignRight" enabled="false"/>
</commands>

等等,但这显然完全禁用了按钮。我现在想要限制我的用户在加载特定文档时能够使用某些内置的Word控件,并让他们可以自由地在其余时间执行任何操作。我试过用:

<command idMso="FontSize" getEnabled="checkDisable"/>

其中checkDisable检查哪些文档是打开的。然后在该文档中搜索一个字符串(这就是我知道我想要禁用按钮的方式),但checkDisable回调在实际加载文档之前触发。 我可以以某种方式直接禁用代码隐藏中的特定按钮而不是通过XML吗?如果我可以这样做,我可以禁用DocumentLoaded事件上的按钮。

任何建议都表示赞赏,我一直在撞墙,用谷歌搜索这个数小时。

1 个答案:

答案 0 :(得分:1)

你在正确的大道上。您需要使用回调而不是属性。但Office会缓存这些值,并且不会每次都根据需要调用回调。相反,要刷新UI(强制Office应用程序调用回调),您需要使用IRibbonUI接口的InvalidateInvalidateControl方法。有关详细信息,请参阅Overview of the IRibbonUI Object

例如,当您在宿主应用程序中打开新文档时,会触发Open事件。您可以查看Document并调用Invalidate方法(如果需要)以强制主机应用程序调用您的回调,从而刷新UI。