VSTO Outlook Addin功能区组未显示在功能区

时间:2015-05-16 23:53:42

标签: c# outlook vsto outlook-addin

我有一个Outlook Addin,它使用两个按钮将一个组添加到功能区。在我添加第二个按钮之前,它工作得很好,但它们具有相同的属性,只是不同的点击处理程序。它显示在自定义功能区菜单中的正确位置,但它显示为灰色。当它变灰并且可能导致什么时,它意味着什么?插件仍然已加载,并且由于任何原因导致插件无法停用,因此无法停用插件。

通过回答这个问题的答案:Outlook addin Home tab with custom button

我能够在主选项卡上的阅读邮件窗口中显示该按钮。与该答案的唯一区别是我使用TabReadMessage而不是TabMail(根据文档)。这完美地工作,直到添加第二个按钮。你可以在screnshot,Archive Message和Archive Message As中看到这两个按钮。

见图: Screenshot

任何人都知道为什么会发生这种情况。为什么要添加第二个按钮让它停止显示?

有没有办法调试这个并看看发生了什么?

任何帮助都会受到赞赏,因为我一直在寻找答案。

由于

编辑:

我的功能区元素属性的生成代码。

    private void InitializeComponent()
    {
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OutlookRibbon));
        this.tab1 = this.Factory.CreateRibbonTab();
        this.group1 = this.Factory.CreateRibbonGroup();
        this.button1 = this.Factory.CreateRibbonButton();
        this.button2 = this.Factory.CreateRibbonButton();
        this.tab1.SuspendLayout();
        this.group1.SuspendLayout();
        // 
        // tab1
        // 
        this.tab1.ControlId.ControlIdType = Microsoft.Office.Tools.Ribbon.RibbonControlIdType.Office;
        this.tab1.ControlId.OfficeId = "TabReadMessage";
        this.tab1.Groups.Add(this.group1);
        this.tab1.Label = "TabReadMessage";
        this.tab1.Name = "tab1";
        // 
        // group1
        // 
        this.group1.Items.Add(this.button1);
        this.group1.Items.Add(this.button2);
        this.group1.Label = "Archive";
        this.group1.Name = "group1";
        this.group1.Position = this.Factory.RibbonPosition.BeforeOfficeId("GroupRespond");
        // 
        // button1
        // 
        this.button1.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge;
        this.button1.Description = "Archive Message";
        this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
        this.button1.Label = "Archive Message";
        this.button1.Name = "button1";
        this.button1.ScreenTip = "Archives Message";
        this.button1.ShowImage = true;
        this.button1.SuperTip = "Archives Message";
        this.button1.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button1_Click);
        // 
        // button2
        // 
        this.button2.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge;
        this.button2.Description = "Archive Message As";
        this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image")));
        this.button2.Label = "Archive Message As";
        this.button2.Name = "button2";
        this.button2.ScreenTip = "Archive message in designated place";
        this.button2.ShowImage = true;
        this.button2.SuperTip = "Archives message in designated place";
        this.button2.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button2_Click);
        // 
        // OutlookRibbon
        // 
        this.Name = "OutlookRibbon";
        this.RibbonType = resources.GetString("$this.RibbonType");
        this.Tabs.Add(this.tab1);
        this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.OutlookRibbon_Load);
        this.tab1.ResumeLayout(false);
        this.tab1.PerformLayout();
        this.group1.ResumeLayout(false);
        this.group1.PerformLayout();

    }

编辑2:

突然间,每一个插件都会在VS中造成空白,导致错误 Ribbon_GetDCVisible说调用函数GetVisisble时发生异常。不知道为什么,但我打开显示UI错误,所以这可能会让他们灰心丧气?不确定,因为它发生在每一个插件上。甚至是全新的空白。

1 个答案:

答案 0 :(得分:1)

灰色按钮表示您的自定义UI已被禁用。很可能你在标记中遇到错误,或者你的代码触发异常。 Office应用程序禁用意外行为的加载项。

我对最初的帖子有很多问题,所以决定将它们作为答案发布。很难将它们全部视为评论。其中任何一个都可以解决问题。

到目前为止,你有什么XML标记?您是否尝试从功能区设计器中提取它?

添加其他按钮后,Outlook中是否出现任何UI错误?有关详细信息,请参阅How to: Show Add-in User Interface Errors

你在getVisible回调中有什么例外?您是否尝试调试代码?