RibbonDropDown丢失项目
问题描述:
我正在将项目添加到RibbonDropDown
,新电子邮件检查器在运行时使用。我加在启动的项目,并刷新需求列表(当用户按下一个按钮)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();
}
注:rddListNames
是RibbonDropDown
这种方法被称为在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
为什么下拉保持丢失的物品?为什么他们不回来,即使我明确地刷新它们?
答
如果您控制修改到丝带UI,你需要通过IRibbonControl.Invalidate()
或IRibbonControl.InvalidateControl
无效的控制缓存。这将触发重新绘制Ribbon元素。
Globals.Ribbons.Ribbon1.Invalidate();
// or...
Globals.Ribbons.Ribbon1.InvalidateControl("ddMarketingList");
我也试过Globals.Ribbons.Ribbon1.rddListNames.ResumeLayout(); - 虽然我没有明确地暂停布局,不出所料,这没有任何区别。 – Ryan 2013-04-23 07:04:51
您使用[** Ribbon XML **或** Ribbon Designer **](http://stackoverflow.com/a/9379747/175679)吗? – SliverNinja 2013-04-29 14:22:56
我正在使用设计器 - 但可以将设计的功能区导出为xml,以便在需要时进行手动编辑。 – Ryan 2013-04-30 00:02:31