2012-07-20 83 views
1

我有一个MS Office 2010 应用程序级别加载项,当它加载时,我的自定义选项卡中的所有功能区控件都被禁用。然后根据特定条件运行此方法以启用在我的自定义选项卡中的所有功能区控件:在特定文档中启用功能区控件C#vsto 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文档,而不是具体的一个我的工作。

我想知道解决这个问题的唯一方法是通过实现一个文档级外接程序,或者是否有人知道在应用程序级加载项中解决此问题?

回答

1

我目前通过将GUID设置为custom document property来解决相同的问题(在Excel中),然后在我的应用程序级别VSTO加载项中的Document.Activate事件上添加事件处理程序。无论何时激活文档,我都会检查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,您将需要检查的文档用什么词相当于激活/停用事件。

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

+0

谢谢杰克,我会给你一个镜头 – 2012-07-20 17:31:30

相关问题