XamRibbon コントロールの Application Menu (アプリケーションメニュー)がクリックされたか否かを判別する方法をご紹介します。判別方法としては、マウスクリックイベント内で、Infragistics.Windows.Utilities.GetAncestorFromType メソッドを用いてクリック対象の要素を取り出し、要素が ApplicationMenuPresenter 型であれば Application Menu であると判断します。
実装例:
private void XamRibbon1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 下記、CAS-26899-P8F8Z6 のコメントアウトしたロジックを流用しています。
// クリックされたオブジェクトの取得方法は下記ブログを参照ください。
//https://oldblogs.jp.infragistics.com/blogs/dikehara/archive/2010/01/05/tips-utilities-1-wpf.aspx
DependencyObject obj = e.OriginalSource as DependencyObject;
//ApplicationMenu をクリックした場合
DependencyObject appMenuObj =
Infragistics.Windows.Utilities.GetAncestorFromType(
obj,
typeof(ApplicationMenuPresenter),
true);
if (appMenuObj != null && appMenuObj is ApplicationMenuPresenter)
{
var appMenu = appMenuObj as ApplicationMenuPresenter;
Debug.WriteLine("Application Menu がクリックされました。");
//例:Application Menu を展開しない処理
//MessageBox.Show("Application Menu は展開しません。");
//e.Handled = true;
}
}
参考情報
[Tips] Utilities その1 親と子 [WPF]
https://oldblogs.jp.infragistics.com/blogs/dikehara/archive/2010/01/05/tips-utilities-1-wpf.aspx