Выбор по умолчанию для раскрывающегося списка XML на ленте

Я новичок в VSTO и пытаюсь создать ленту Excel с некоторыми простыми элементами управления. Я понимаю, что в Visual Studio есть два способа сделать это. Ribbon XML и Ribbon Designer, и, судя по тому, что я читал, большинство людей предпочитают подход XML, потому что он дает большую гибкость.

Я попробовал оба подхода для создания простой ленты с вкладкой и раскрывающимся списком. С помощью конструктора ленты я получаю видимый сгенерированный "код позади" C #, который я могу использовать для изменения элементов управления во время выполнения. Кроме того, в раскрывающемся списке автоматически по умолчанию отображается первый элемент, но с помощью сгенерированных объектов C # я мог бы установить для него все, что захочу.

Я пытаюсь сделать то же самое с подходом XML, и вот XML:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab id="myTab" label = "My Tab" >
        <group id="MyGroup" label="My Group" >
          <dropDown id="dropDown" label="Items">
            <item id="item1" label="Item 1" />
            <item id="item2" label="Item 2" />
            <item id="item3" label="Item 3" />
          </dropDown>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Но при этом поле со списком не получает элемент по умолчанию, оно просто пустое. И нет никакого видимого "кода позади" или привязок данных, которые я мог бы использовать? Как мне установить элемент по умолчанию для этого элемента управления (например, id = item1).

Картинки для наглядности

Нет элемента по умолчанию:

Не инициализировано

Имеет элемент по умолчанию:

Инициализировано

заранее спасибо


person DoubleTrouble    schedule 12.03.2018    source источник


Ответы (1)


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

Строка, присвоенная getSelectedItemID (или getSelectedItemIndex), является именем процедуры, которая должна быть выполнена.

Обратите особое внимание на сигнатуры методов обратных вызовов ленты. Для C # getSelectedItemId необходимо вернуть string; getSelectedItemIndex и int. Вы найдете список сигнатур методов в части 3 серии статей Настройка ленты Office 2007 Fluent для разработчиков

     // Ribbon1.xml
      <dropDown id ="dd1" getSelectedItemID="InitializeDropdown" >
        <item id="ddItem1" label="Item 1"/>
        <item id="ddItem2" label="Item 2"/>
      </dropDown>

    // Ribbon1.cs
    public void Ribbon_Load(Office.IRibbonUI ribbonX)
    {
        ribbon = ribbonX;
    }

    //will be executed automatically when Ribbon_Load runs
    public string InitializeDropdown(Office.IRibbonControl ctl)
    {
        return "ddItem2";
    }
person Cindy Meister    schedule 12.03.2018
comment
Спасибо, Синди, это сработало! Я хочу, чтобы vsto xml работал больше как обычный xaml, когда дело доходит до привязки данных. - person DoubleTrouble; 12.03.2018
comment
Ммм, ну, другое происхождение, другая команда ... Сложность, безусловно, является причиной того, что команда VSTO вложила ресурсы в Ribbon Designer. Важно помнить, что XML ленты был разработан для Office, а не для Visual Studio, и что XML был довольно новым годом более 10 лет назад, когда они работали над ним. Насколько я помню, в то время XAML даже не было в Visual Studio! - person Cindy Meister; 12.03.2018