Добавление элементов в RibbonDropDown во время выполнения

Итак, у меня есть раскрывающееся меню на ленте с содержимым, которое можно изменить во время его использования. Outlook также рад предоставить мне "добавить" или "вставить" элементы в него, если я не добавляю более 1 элемента.

Если я попытаюсь, мне скажут, что индекс за пределами, а не для расширения верхних границ для меня.

Я нахожу, что если я вставляю его в коллекцию в части кода разработчика, он будет работать нормально, но код разработчика запускается только один раз, если только я не удаляю ленту и не заново ее создаю.

Любые идеи относительно того, как я могу получить эту работу

Ответ 1

Вообще говоря, VSTO хочет, чтобы вы полностью описали элементы пользовательского интерфейса, которые вам нужны, в первый раз, когда вас попросят (через GetCustomUI).

Я столкнулся с подобными проблемами раньше с vsto и единственным разумным способом вокруг него, который я нашел, было предварительное заполнение (через конструктор) всех элементов, которые могут вам понадобиться (так что пусть 10 элементов в раскрывающемся списке).

Затем программно СКРЫТЬ или ПОКАЗАТЬ эти элементы и обновить их титры и другие свойства по мере необходимости, пока ваш аддон работает.

Таким образом, вам никогда не придется динамически добавлять или удалять что-либо.

Ответ 2

Попробуйте это. Это должно сработать для вас.

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

Ответ 3

Попробуйте следующее прямо внутри класса ленты:

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

Ответ 4

jeds, ваш подход не работает с "новым". Вы должны использовать "Globals.Factory.GetRibbonFactory(). CreateRibbonDropDownItem()". В противном случае вы правы, и ваш подход отлично работает с RibbonGallery.

Этот подход также отлично работает с DropDown. Я все еще часто сталкиваюсь с конфликтом, о котором можно использовать...

Однако, кроме этих двух объектов (Dropdown и RibbonGallery), я считаю, что это неверно. Вам просто нужно вырезать объекты раньше времени и использовать их по мере необходимости.

Вы также можете использовать XML-ленту, но это создает еще больший набор головных болей (по крайней мере, для моих случаев использования).

Ответ 5

Попробуйте использовать галерею лент. Я смог изменить их во время выполнения всего лишь с помощью

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

где rGallery - это ленточная галерея.