C# VSTO功能区组合框动态添加项目

C# VSTO功能区组合框动态添加项目,c#,outlook,vsto,add-in,outlook-addin,C#,Outlook,Vsto,Add In,Outlook Addin,如何动态添加组合框项目 我有一个组合框,我将在OnChange回调事件期间在其中调用API。将项目加载到组合框时出现问题 public void OnChange(Office.IRibbonControl control, string text) { var result = GETMembersList("https://restcountries.eu/rest/v1/all"); var members = fr

如何动态添加组合框项目

我有一个组合框,我将在OnChange回调事件期间在其中调用API。将项目加载到组合框时出现问题

    public void OnChange(Office.IRibbonControl control, string text)
    {            
        var result = GETMembersList("https://restcountries.eu/rest/v1/all");

        var members = from member in result
                      select member;

        foreach (var member in members)
        {
            dsMember mem = new dsMember();
            mem.Id = member["numericCode"].ToString();
            mem.Name = member["name"].ToString();

            RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
            item.Label = mem.Name;
            **cmbMembers.Items.Add(item);** ?? //problem here, cant access the combo box
        }
Ribbon.xml

    <?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="tabTest" label="TEST">
        <group id="grpTest">
          <comboBox id="cmbMembers" label="Users" showImage="false" 
                  onChange="OnChange"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

VISTO遇到了一个问题,我也尝试从代码隐藏添加多个项目,但出现了一些问题。 但是,可以动态修改现有项。 尝试在Ribbon1\u加载事件中编辑

public partial class Ribbon1
{
    private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
    {
        this.comboBox1.Items[0].Label = "new Lable";
    }
}
试试这个:

 RibbonDropDownItem item = Factory.CreateRibbonDropDownItem();

您是否尝试过
Globals.Ribbons.Ribbon1.cmbMembers.Items.Add(item)?@haindl-ya我试过了,但是Ribbon1是空的。从办公室的角度来看,没有XML就无法创建Ribbon。无论您使用VSTO、COM加载项还是VBA,您始终需要此Ribbon.xml。VSTO功能区设计器实际上只是简化此过程的一种方法。从XML的角度来看,有两种方法可以让组合框中填充项目。如果项目是静态的并且没有更改,那么您只需在
上使用
getItemCount/getItemID/getItemLabel
,但是如果项目在运行期间更改,那么您必须使用
而不是
,并在
getContent
内部构建一个