RibbonDropDown丢失物品

时间:2013-04-23 07:03:02

标签: c# outlook outlook-addin ribbon office-2010

我正在将项目添加到新电子邮件检查程序在运行时使用的RibbonDropDown。我在启动时添加项目并按需刷新列表(当用户按下按钮时

public void RefreshListNames()
{
    Logger.Log("Refresh Mail Lists");

    Globals.Ribbons.Ribbon1.rddListNames.Items.Clear();
    foreach (KeyValuePair<Guid, string> kvp in _dda.GetMarketingListNames())
    {
        Microsoft.Office.Tools.Ribbon.RibbonDropDownItem dd = 
            Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();

        dd.Tag = kvp.Key;
        dd.Label = kvp.Value;

        Logger.Log("Adding " + dd.Label);

        Globals.Ribbons.Ribbon1.rddListNames.Items.Add(dd);

    }

    Globals.Ribbons.Ribbon1.rddListNames.ResumeLayout();
}

注意: rddListNamesRibbonDropDown

此方法在ThisAddIn_Startup方法中调用,并在启动时进行核心填充。但是,任何新的邮件窗口都会以空白下拉列表结束 - 没有项目。即使刷新列表也不会再次添加项目。

我添加了一些日志记录:它显示当按下“刷新按钮”时该方法正在运行:

23/04/2013 14:36:43 - Refresh Mail Lists 
23/04/2013 14:36:45 - Adding Marketing List - Dynamic 
23/04/2013 14:36:45 - Adding Marketing List - Bs 
23/04/2013 14:36:45 - Adding Marketing List - As

为什么下拉不断丢失物品?他们为什么不回来,即使我明确刷新它们?

1 个答案:

答案 0 :(得分:1)

如果您对功能区UI 进行控制修改,则需要通过IRibbonControl.Invalidate()IRibbonControl.InvalidateControl使控制缓存无效。这将触发Ribbon元素的重绘。

Globals.Ribbons.Ribbon1.Invalidate();
// or...
Globals.Ribbons.Ribbon1.InvalidateControl("ddMarketingList");