在特定文档C#vsto 2010中启用功能区控件

在特定文档C#vsto 2010中启用功能区控件,c#,ms-word,vsto,office-interop,C#,Ms Word,Vsto,Office Interop,我有一个MS Office 2010应用程序级别的加载项,当加载该加载项时,我的自定义选项卡中的所有功能区控件都将被禁用。然后根据某些条件,我运行此方法以启用自定义选项卡中的所有功能区控件: public void EnableRibbonControls() { IUnityContainer container = ServiceLocator.Current.GetInstance<IUnityContainer>(); RibbonTab customT

我有一个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;
        }
    }
}
public void启用RibbonControl()
{
IUnityContainer容器=ServiceLocator.Current.GetInstance();
RibbonTab customTab=container.Resolve();
对于(int i=0;i
问题是,这段代码启用了每个打开的Word文档的功能区中的功能区控件,而不是我正在处理的特定文档中的功能区控件


我想知道解决此问题的唯一方法是实现文档级外接程序,还是有人知道在应用程序级外接程序中解决此问题的方法?

我目前正在处理相同的问题(在Excel中)通过将GUID设置为,然后在文档上添加事件处理程序。在我的应用程序级别VSTO加载项中激活事件。每当激活文档时,我都会检查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的,您需要检查文档中与激活/停用事件等效的单词


免责声明:这只是我实际代码的摘录,可能包含错误。

谢谢你,杰克,我会试一试