那麼這有點棘手,但可行。首先,你可以做到這一點只能通過功能區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。 –