2013-04-23 176 views
4

我正在將項目添加到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(); 
} 

注: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 

爲什麼下拉保持丟失的物品?爲什麼他們不回來,即使我明確地刷新它們?

+0

我也試過Globals.Ribbons.Ribbon1.rddListNames.ResumeLayout(); - 雖然我沒有明確地暫停佈局,不出所料,這沒有任何區別。 – Ryan 2013-04-23 07:04:51

+0

您使用[** Ribbon XML **或** Ribbon Designer **](http://stackoverflow.com/a/9379747/175679)嗎? – SliverNinja 2013-04-29 14:22:56

+0

我正在使用設計器 - 但可以將設計的功能區導出爲xml,以便在需要時進行手動編輯。 – Ryan 2013-04-30 00:02:31

回答

1

如果您控制修改到絲帶UI,你需要通過IRibbonControl.Invalidate()IRibbonControl.InvalidateControl無效的控制緩存。這將觸發重新繪製Ribbon元素。

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

我試過這個 - 在清除/重新設置下拉項目的循環後添加。但是,它仍然不起作用 - 仍然是空白。有沒有特定的方法來調用它? (我找不到任何其他方式的例子)。謝謝 – Ryan 2013-04-24 02:49:43

+0

我也試過Globals.Ribbons.Ribbon1.rddListNames.PerformDynamicLayout();和dd.Parent.PerformDynamicLayout(); – Ryan 2013-04-29 02:47:30