在运行时将项添加到RibbonDropDown

时间:2011-04-13 03:16:35

标签: c# visual-studio-2010 vsto outlook-2007

所以我在功能区中有一个下拉菜单,其内容可以在使用时更改。只要我不添加超过1个项目,Outlook也很乐意让我“添加”或“插入”项目。

如果我尝试,我会被告知索引超出界限而不是扩大我的上限。

我发现如果我将它插入到代码的设计器部分的集合中,它将正常工作,但设计器代码只运行一次,除非我处理功能区并重新创建它。

关于如何实现这一目标的任何想法

5 个答案:

答案 0 :(得分:42)

试试这个。这应该适合你。

RibbonDropDownItem item 
      = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
item.Label = "First Name";
this.cbRecent.Items.Add(item);

答案 1 :(得分:8)

尝试以下方法:

RibbonDropDownItem item = this.Factory.CreateRibbonDropDownItem();
item.Label = "Text";
combo.Items.Add(item);

答案 2 :(得分:2)

jeds,你的方法不适用于“新”。你必须使用“Globals.Factory.GetRibbonFactory()。CreateRibbonDropDownItem()”。否则,你是对的,你的方法适用于RibbonGallery。

使用DropDown,这种方法也很有用。我仍然经常对使用哪一个感到矛盾......

然而,除了那两个对象(Dropdown和RibbonGallery)之外,我相信冒险是正确的。您只需要提前删除对象并根据需要使用它们。

您也可以使用XML功能区,但这会产生更大的麻烦(至少对我的用例而言)。

答案 3 :(得分:0)

尝试使用功能区库。我能够在运行时修改它们,只需

foreach (string s in list)
{
     RibbonDropDownItem item = new RibbonDropDownItem();                
     item.Label = s;
     rGallery.Items.Add(item);                
}

其中rGallery是RibbonGallery。

答案 4 :(得分:-2)

一般来说,VSTO希望您完全描述您需要的UI元素,这是您第一次被要求(通过GetCustomUI)。

我之前使用vsto遇到了类似的问题,关于它的唯一合理方法我发现是通过设计师预先填充你可能需要的所有元素(所以我们在下拉列表中说10个项目) )。

然后,以编程方式隐藏或显示这些项目,并在您的插件运行时根据需要更新其标题和其他属性。

这样,您就不必动态添加或删除任何内容。