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
и заполняется corectly при запуске. Однако любое новое окно Почты заканчивается пустым выпадающим списком-нет элементов. Даже обновление списка не добавляет элементы обратно.
I добавлено некоторое ведение журнала: он показывает, что метод запускается при нажатии кнопки "Обновить":
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 ответ:
Если вы вносите изменения управления в ленточный пользовательский интерфейс , вам нужно сделать недействительным кэш управления через
IRibbonControl.Invalidate()
илиIRibbonControl.InvalidateControl
. Это вызовет перекраску элементов ленты.Globals.Ribbons.Ribbon1.Invalidate(); // or... Globals.Ribbons.Ribbon1.InvalidateControl("ddMarketingList");