我需要编写一个Word加载项(支持2013+),以根据当前打开的文档的路径(例如,文档的存储位置)有条件地禁用“另存为”选项/标签。
我正在使用C#,并且具有以下xml,该XML会禁用该标签,但可悲的是,该文档对每个文档都是如此:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<backstage>
<button idMso="FileSaveAs" visible="false"/>
<tab idMso="TabSave" visible="false"/>
</backstage>
</customUI>
我尝试过:
非常感谢您的帮助。谢谢。
答案 0 :(得分:0)
以下方法可在Word 2013,Word 2016和Word 2019中使用(不允许隐藏/禁用内置选项卡的回调,但不能使用Commands。)
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" xmlns:x="MyComAddin.Connect" onLoad="RibbonOnLoad">
<commands>
<command idMso="TabSave" getEnabled="GetEnabledCallback" />
</commands>
<backstage onShow="BackstageOnShowCallback">
</backstage>
</customUI>
然后只需从BackstageOnShowCallback和DocumentChange事件中调用Ribbon.Invalidate()(DocumentChange事件,否则在要控制的文档和不希望控制的文档之间切换会产生不一致的结果)。
它只需要Ribbon.InvalidateControlMso(“ TabSave”)-但是,如果要对按钮FileSave,FileSaveAs等执行相同的操作,则全局Ribbon.Invalidate()更简单。
当后台中的同一件事不起作用时,Command回调可以在内置选项卡等上工作,这真让人感到惊讶。
答案 1 :(得分:0)
有点晚了,但认为这可能会有所帮助..
ribbon xml 只是一个字符串,因此可以被操纵。
功能区 XML:
<backstage>
<tab idMso="TabSave" visible="%IsSaveTabVisible%"/>
</backstage>
代码:
public string GetCustomUI(string ribbonID)
{
try
{
string ribbonXml = GetResourceText("Ribbon.xml");
if (...)
ribbonXml = ribbonXml.Replace("%IsSaveTabVisible%", "true");
else
ribbonXml = ribbonXml.Replace("%IsSaveTabVisible%", "false");
return ribbonXml;
}
catch (Exception ex)
{
Message.ShowError(ex);
return string.Empty;
}
}
-- 编辑 --
重新阅读您的帖子,并意识到您希望每次文档更改时都能看到可见性。我认为这种方法行不通,因为我认为它只能在 Word 启动时应用。