【发布时间】:2018-02-08 07:01:27
【问题描述】:
我正在使用 C# VSTO 为 Word 2010 创建应用程序级加载项。该加载项有一个自定义任务窗格,其可见性由功能区上的切换按钮控制。功能区是使用 XML(不是 Visual Studio 设计器)创建的。
当我从加载项的功能区类外部调用 ribbon.Invalidate 时,我无法刷新我的功能区,因为它为空。我收到一个 System.NullReferenceException 发出消息:
对象引用未设置为对象的实例
我怀疑功能区是空的,因为在调用它时没有加载底层 XML。我尝试了很多事情,包括
Invalidating Ribbon from Outside Ribbon
这建议在ThisAddIn 类中定义一个类级别的Office.IRibbonUI,并在Ribbon_Load 回调中设置它的值。我仍然收到了这个例外以及我所做的所有其他尝试。这是我的代码:
在myRibbon 课程中我有:
[ComVisible(true)]
public class myRibbon : Office.IRibbonExtensibility
{
public Office.IRibbonUI ribbon;
private bool isTaskPaneVisible;
public bool IsTaskPaneVisible
{
get { return isTaskPaneVisible; }
set
{
isTaskPaneVisible = value;
// This is where the null exception is thrown
ribbon.Invalidate();
}
}
和
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
}
在ThisAddin 课程中我有:
public partial class ThisAddIn
{
internal myRibbon myRibbon;
和
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
myRibbon = new myRibbon();
return myRibbon;
}
如果从功能区类外部调用 ribbon.Invalidate 以使其正常运行,我们将不胜感激。
【问题讨论】:
标签: c# ms-word vsto office-addins