那么这有点棘手,但可行。首先,你可以做到这一点只能通过功能区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);
}
那么你应该在这个例子中看到的下拉列表中的Office应用程序,加载项选项卡下与树值,当你选择一个你应该得到的名称和ID雇员。
感谢您的回答。让我试试这个。 –
真棒!它的工作正常......谢谢@PetLahev。 –