Ну, это немного сложно, но выполнимо. Во-первых вы можете сделать это только с помощью ленты 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; }
}
инициировать объект со значениями, как показано ниже (для облегчения Ниже я положил все в классе ленты, но это, безусловно, плохой подход)
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) (для списка обратных вызовов относится here)
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);
}
Затем вы должны увидеть выпадающий список в приложении офиса, на вкладке Надстройки со значениями дерева в этом примере, и когда вы выбираете тот, который вы должны получить имя и идентификатор наемный рабочий.
Спасибо за ваш ответ. Позвольте мне попробовать. –
Awesome !! Его работа прекрасна ... Спасибо @PetLahev. –