【发布时间】:2015-07-03 05:11:56
【问题描述】:
我正在使用 C# VSTO 为 Word 2010 创建应用程序级加载项。当加载项的自定义任务窗格隐藏或可见时,我想访问加载项功能区的 get_Pressed 回调方法。但是,为此,我需要将功能区提供给ThisAddIn 类中的myTaskPane_VisibleChanged 事件。我无法使用 Ribbons 集合,因为加载项中的功能区是在功能区 XML 中创建的,而不是使用 Visual Studio 的功能区设计器创建的。
在ThisAddIn 课程中我有:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
myTaskPane.VisibleChanged += new EventHandler(myTaskPane_VisibleChanged);
}
和
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new myRibbon();
//I tried playing with IRibbonExtension here, but could not get that to work
}
和
public void myTaskPane_VisibleChanged(object sender, System.EventArgs e)
{
//Here is where I would like to access the ribbon
//I think the command would look something like:
//myRibbon.IsTaskPaneVisible = !myRibbon.IsTaskPaneVisible;
//myRibbon is not accessible here
}
在我的 myRibbon 类中:
public class myRibbon : Office.IRibbonExtensibility
{
public Office.IRibbonUI ribbon;
private bool isTaskPaneVisible;
public bool IsTaskPaneVisible
{
get { return isTaskPaneVisible; }
set
{
isTaskPaneVisible = value;
ribbon.InvalidateControl("rxtglElementsPane");
}
}
和
public bool rxtglElementsPane_get_Pressed(Office.IRibbonControl control)
{
try
{
switch (control.Id)
{
case "rxtglElementsPane":
return isTaskPaneVisible;
default:
return false;
}
catch
{
return false;
}
}
}
这段代码大部分基于这篇文章:
Synchronizing Ribbon and Task Pane
作者在 cmets 中提到 CreateRibbonExtensibilityObject 中生成的代码包括功能区的实例化。当我创建插件时,Visual Studio 2013 没有生成这样的代码。
非常感谢从 ThisAddIn 类访问功能区的任何帮助。
【问题讨论】: