在运行时将项添加到RibbonDropDown

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

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

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

关于如何让这个工作的任何想法

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

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

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

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

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

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

请尝试以下方法:

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

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

这种方法对于DropDown也很有用。 关于使用哪一个,我仍然经常发生冲突……

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

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

尝试使用function区库。 我能够在运行时修改它们

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

其中rGallery是RibbonGallery。