我有一个为Word 2010开发的VSTO加载项,目前正在升级到Office2016。我要做的一件事是,在功能区xml中,禁用另存为命令(<命令idMso =“ FileSaveAs” getEnabled =“ IsFileSaveAsEnabled” ...>)与某些文档。但是,似乎Microsoft已将无法动态禁用的新的“另存为”选项卡添加到Word 2016的后台视图中。
禁用“另存为”命令会影响“另存为”按钮(如果已添加到快速访问工具栏上),但不会影响后台视图上的选项卡。我尝试更改此标签上的其他内容,但它似乎忽略了我尝试进行的任何更改。
我正在VS 2017中进行开发,并自动将项目迁移到Office 2016。
如果我添加
<backstage>
...
<tab idMso="TabSave" getEnabled="IsFileSaveEnabled" />
...
</backstage>
对我的ribbon.xml,未调用IsFileSaveEnabled。
public bool IsFileSaveEnabled(IRibbonControl control)
{
return false; // Not the actual implementation, but you get the idea.
}
实际上,即使将enabled属性设置为false也无济于事
<backstage>
...
<tab idMso="TabSave" visible="false" />
...
</backstage>
实际上隐藏了选项卡。尽管这样做不好,因为所有文档都会发生这种情况,但是我希望它是有条件的。
那么是不是只能按照我想要的方式禁用此选项卡,还是需要做一些新的事情?我在网上真的找不到其他任何东西。
答案 0 :(得分:0)
如果可见性应视情况而定,则该设置必须是动态的。这意味着它需要回调而不是静态设置:
<tab idMso="TabSave" getVisible="procedureName" />
此过程需要在Ribbon1.cs(或VSTO项目中调用的类)中,以及使控件可见(或不可见)的逻辑-与IsFileSaveEnabled
相同。第一次加载功能区时以及控件(或整个功能区)无效(Ribbon.Invalidate
/ InvalidateControl(controlID)
)时,都会触发回调。通常会在DocumentOpen,DocumentClose,DocumentChange等事件中完成此操作。
我假设您已经有初始化代码中的Ribbon
对象(GetCustomUI
和Ribbon_Load
)的过程。
这是我在测试项目中遇到的一个简单示例,它可以切换组的可见性:
private Office.IRibbonUI ribbon; //initialized via Ribbon's load event
bool bGetVisible = false;
//triggered by clicking a Ribbon control
public void ShowFontGroup_Click(Office.IRibbonControl ctl)
{
bGetVisible = true;
ribbon.Invalidate(); //triggers all "get" callbacks in the Ribbon
}
//callback triggered by invalidating the Ribbon
public bool GroupFont_GetVisible(Office.IRibbonControl ctl)
{
return bGetVisible;
}
答案 1 :(得分:0)
当我想到解决方法时,我将在这里回答我自己的问题。与其尝试与内置的“另存为”选项卡进行交互,不如将其永久隐藏,并添加我自己创建的该选项卡的副本,以使其外观和行为与内置选项卡完全相同。需要做更多的工作,但是想不出其他方法。
答案 2 :(得分:0)
我没有Word 2016,所以我无法验证这一点,但是当它是“另存为”时,您可能会截获save事件并中止。
// this is for a document-level add-in; do this in your startup method
BeforeSave += new SaveEventHandler(ThisDocument_BeforeSave);
private void ThisDocument_BeforeSave(object sender, SaveEventArgs e)
{
e.Cancel = e.ShowSaveAsDialog;
return;
}
我在外接程序中执行了类似的操作,并且效果很好。