2

MS Office 2010アプリケーション レベルのアドインがあり、それが読み込まれると、カスタム タブのすべてのリボン コントロールが無効になります。次に、特定の条件に基づいて、このメソッドを実行して、カスタム タブのすべてのリボン コントロールを有効にします。

   public void EnableRibbonControls()
{
    IUnityContainer container = ServiceLocator.Current.GetInstance<IUnityContainer>();
    RibbonTab customTab = container.Resolve<RibbonTab>();

    for (int i = 0; i < customTab.Groups.Count; i++)
    {
        IList<RibbonControl> controls = customTab.Groups[i].Items;
        foreach (var control in controls)
        {
            control.Enabled = true;
        }
    }
}

問題は、このコードにより、開いているすべてのWord ドキュメントのリボンでリボン コントロールが有効になり、作業中の特定のドキュメントでは有効にならないことです。

これを修正する唯一の方法がドキュメント レベルのアドインを実装することなのか、それともアプリケーション レベルのアドインでこれを回避する方法を誰かが知っているのかを知りたいです。

4

1 に答える 1

1

現在、GUID をカスタム ドキュメント プロパティとして設定し、アプリケーション レベルの VSTO アドインの Document.Activate イベントにイベント ハンドラーを追加することで、(Excel で) 同じ問題に取り組んでいます。ドキュメントがアクティブ化されるたびに、GUID を確認し、それに応じてボタンを表示または非表示にします。

凝縮されたコードの例:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    var app = Globals.ThisAddIn.Application;
    app.WorkbookActivate += new Excel.AppEvents_WorkbookActivateEventHandler(Application_WorkbookActivate);
    app.WorkbookDeactivate += new Excel.AppEvents_WorkbookDeactivateEventHandler(Application_WorkbookDeactivate);
}

private Guid _GetIdentity(Excel.Workbook Wb)
{
    try
    {
        // check for GUID
        Microsoft.Office.Core.DocumentProperties properties = Wb.CustomDocumentProperties;
        Microsoft.Office.Core.DocumentProperty version = properties["_CustomIdentifier"];

        // parse the version for decide what features to activate
        Guid guidVersion;
        return Guid.TryParse(Convert.ToString(version.Value), out guidVersion) ? guidVersion : Guid.Empty;
    }
    catch
    {
        return Guid.Empty;
    }
}

void Application_WorkbookDeactivate(Excel.Workbook Wb)
{
   Globals.Ribbons.MyRibbon.btnButtonName.Visible = false;
}

void Application_WorkbookActivate(Excel.Workbook Wb)
{
    if(_GetIdentity(Wb) == {PRE-DEFINED-GUID})
    {
        Globals.Ribbons.MyRibbon.btnButtonName.Visible = true;
    }
}

私のコードは Excel に固有のものです。Activate/Deactivate イベントに相当する Word のドキュメントを確認する必要があります。

免責事項: これは私の実際のコードの抜粋にすぎず、エラーが含まれている可能性があります。

于 2012-07-20T15:39:53.763 に答える