私が発見しましたXMLアプローチを採用することなくソリューションを提供します。 (私のRibbonDropDownItemsが含まれています)
RibbonGalleryクラス「は、ユーザがこのRibbonGallery上項目をクリックしたときに発生し、」クリックイベントを提供します。
だから、アイテムのいずれかがクリックされたことを確認してからRibbonGallery#のSelectedItemで選択した項目を取得するためにRibbonGalleryクリックのリスナーにを使用することができます。
private void myDropdownGallery_Click(object sender, RibbonControlEventArgs e)
{
//'ribbonGalleryObject' is the object created in Ribbon.Designer.cs
RibbonDropDownItem item = ribbonGalleryObject.SelectedItem;
string itemLabel = item.Label;
if (itemLabel == "myItem1") {
System.Windows.Forms.MessageBox.Show("Item 1 says hello");
}
else if (itemLabel == "myItem2"){
System.Windows.Forms.MessageBox.Show("Item 2 says hello");
}
}
さらに、あなたはRibbonDropDownItemsイベントハンドラを区別し、現在の1と同様、あなたのアーキテクチャを維持するために反射に頼ることができる:ここでは一例です。
private void gallery1_Click(object sender, RibbonControlEventArgs e)
{
//'ribbonGalleryObject' is the object created in Ribbon.Designer.cs
RibbonDropDownItem item = ribbonGalleryObject.SelectedItem;
string itemLabel = item.Label;
string methodName = itemLabel + "_Click";
System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName);
methodInfo.Invoke(this, null);
}
//click event handler for item 1
public void myItem1_Click()
{
System.Windows.Forms.MessageBox.Show("Item 1 says hello");
}
//click event handler for item 2
public void myItem2_Click()
{
System.Windows.Forms.MessageBox.Show("Item 2 says hello");
}
アイテムのラベルと項目のイベントハンドラ名間の「隠れた」依存関係があるので、あなたが反射アプローチに注意する必要があります注意してください。
こんにちは、ありがとうございました。私はそれを指定していないが、私はオフィス2013/2016と一緒に働いている。私はSelectionChangedイベントが最新のAPIバージョンでサポートされていることを理解できますか? – Mario
いいえ、間違った道があります。注意してください。リボンXMLマークアップとハンドコールバックをコード内で使用することもできます。 –
私はリボンのXMLを乱さずに解決策を見つけました。それでも、あなたの答えは解決策を提供します - これはおそらくよりクリーンです - 別のアプローチを使用して、upvote :) – Mario