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

标签 c# ms-word vsto office-interop

我有一个 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 文档,而不是我正在处理的特定文档。

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

最佳答案

我目前通过将 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 的,您需要查看文档,了解哪些 Word 等效于激活/停用事件。

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

关于c# - 在特定文档中启用功能区控件 C# vsto 2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11575209/

相关文章:

c# - 在 VSTO 插件中存储一些数据的最佳方式是什么?

C# 动态创建 Lambda 表达式

c# - 如何在 Visual Studio 2012 C# 中使用 InstallShield LE 注册类型库文件 (.tlb)

vba - 从具有合并单元格的表格中删除列

vsto - 确定 word 文档是从空白文档创建还是从现有文档打开

c# - visual studio Word Addin 需要超过 15 秒才能关闭 word

c# - 如何即时返回方法的完全限定名称?

c# - 数组中的最大和最小数

vba - 使用 FileDialog 从 Word 打开 Excel

java - 正则表达式的字符串中的COLON unicode和冒号之间有区别吗?