簡體   English   中英

將VSTO功能區公開到C#中的VisibleChanged事件

[英]Expose VSTO Ribbon to VisibleChanged event in C#

我正在使用C#VSTO創建Word 2010的應用程序級加載項。 當加載項的“自定義任務”窗格被隱藏或顯示時,我想訪問該加載項的功能區的get_Pressed回調方法。 但是,為此,我需要功能區對ThisAddIn類中的myTaskPane_VisibleChanged事件可用。 我無法使用Ribbons集合,因為加載項中的功能區是在Ribbon XML中創建的,而不是使用Visual Studio的Ribbon Designer創建的。

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;
        }
    }
}

大部分代碼基於本文:

同步功能區和任務窗格

作者在評論中提到在CreateRibbonExtensibilityObject中生成的代碼包括功能區的實例化。 當我創建加載項時,Visual Studio 2013不會生成此類代碼。

ThisAddIn類訪問功能區的任何幫助將不勝感激。

MSDN Visual Studio論壇的Starain Chen向我提供了我在那兒發布的帖子的答案:

MSDN在C#中將VSTO功能區公開到VisibleChanged事件

解決的辦法是使用myRibbon類型為ThisAddIn類定義一個字段/屬性。

public partial class ThisAddIn
{
   internal myRibbon myRibbon;
   ...
    protected override Office.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        myRibbon=new myRibbon();
        return myRibbon;
    }
}

無需訪問功能區對象。 而是可以使用Globals.ThisAddin屬性訪問外接程序類。 有關更多信息,請參見Office項目中的對象的全局訪問 因此,您將能夠修改可在Ribbon回調中使用的任何局部變量。

您可以在MSDN的以下系列文章中閱讀有關Fluent UI(又稱為Ribbon UI)的更多信息:

為開發人員自定義2007 Office Fluent功能區(第1部分,共3部分)

為開發人員自定義2007 Office Fluent功能區(第2部分,共3部分)

為開發人員自定義2007 Office Fluent功能區(第3部分,共3部分)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM