Добавление элементов в RibbonDropDown во время выполнения - PullRequest
13 голосов
/ 13 апреля 2011

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

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

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

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

Ответы [ 5 ]

43 голосов
/ 09 августа 2011

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

RibbonDropDownItem item 
      = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
item.Label = "First Name";
this.cbRecent.Items.Add(item);
10 голосов
/ 21 ноября 2012

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

RibbonDropDownItem item = this.Factory.CreateRibbonDropDownItem();
item.Label = "Text";
combo.Items.Add(item);
2 голосов
/ 13 сентября 2013

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

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

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

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

0 голосов
/ 27 апреля 2011

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

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

, где rGallery - это RibbonGallery.

0 голосов
/ 13 апреля 2011

Вообще говоря, VSTO хочет, чтобы вы полностью описали элементы интерфейса, которые вам нужны, один раз, в самый первый раз, когда вас об этом просят (через GetCustomUI).vsto и о единственно разумном способе, который я нашел, это предварительно заполнить (через дизайнера) все элементы, которые вам могут понадобиться (скажем, 10 элементов в раскрывающемся списке).или ПОКАЗЫВАЙТЕ эти элементы и обновляйте их подписи и другие свойства по мере необходимости во время работы надстройки.

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

...