Ну, это немного сложно, но выполнимо. Во-первых, это можно сделать только через Ribbon XML (не через конструктор — по крайней мере, я не знаю об этом)
Я создал очень простой XML
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns">
<group id="MyGroup"
label="My Group">
<dropDown id ="cbTest"
label="Test Item"
getItemID="GetItemID"
getItemLabel="GetItemLabel"
getItemCount="GetItemCount"
onAction="OnAction">
</dropDown >
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Ключевой частью является GetItemCount (вы можете назвать его как хотите). Без этого обратного вызова вы никогда не получите никакого обратного вызова для getItemID или getItemLabel.
Остальное легко, создайте объект, который хранит всю необходимую вам информацию, как здесь
public class Employee
{
public Employee(int id, string name)
{
this.ID = id;
this.Name = name;
}
public int ID { get; set; }
public string Name { get; set; }
}
инициировать объект со значениями, как показано ниже (для удобства я поместил все в класс Ribbon, но это определенно плохой подход)
public class Ribbon1 : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
private List<Employee> _employees = new List<Employee>();
public Ribbon1()
{
_employees.Add(new Employee(1, "John"));
_employees.Add(new Employee(2, "Mark"));
_employees.Add(new Employee(3, "Tom"));
}
// ... rest of the code here
}
а затем обратные вызовы (все еще внутри класса Ribbon1) (список обратных вызовов см. в здесь)
public int GetItemCount(Office.IRibbonControl control)
{
return _employees.Count;
}
public string GetItemID(Office.IRibbonControl control, int index)
{
var employee = _employees[index];
return employee.ID.ToString();
}
public string GetItemLabel(Office.IRibbonControl control, int index)
{
var employee = _employees[index];
return employee.Name;
}
public void OnAction(Office.IRibbonControl control, string selectedId, int selectedIndex)
{
var selected = string.Format("{0} ({1})", _employees[selectedIndex].Name, _employees[selectedIndex].ID);
System.Windows.Forms.MessageBox.Show(selected);
}
Затем вы должны увидеть раскрывающийся список в своем приложении Office на вкладке «Надстройки» со значениями дерева в этом примере, и когда вы выберете один, вы должны получить имя и идентификатор сотрудника.
person
PetLahev
schedule
02.08.2016