いや長いですね。その28書いてから1年と1月たってました。でもWPFのバージョンは変わらない!!
ContextMenuコントロール
ContextMenuコントロールは、特定のコントロールに対して固有のメニュー(主に右クリックしたときに表示されるメニュー)を提供するためのコントロールです。ContextMenuコントロールの見た目を以下に示します。
ContextMenuの基本的な使い方
ContextMenuコントロールは、コントロールの基本クラスであるFrameworkElementクラスで定義されているContextMenuプロパティに設定して利用します。ContextMenuコントロールのItemsプロパティにMenuItemを設定して、メニューの項目を定義します。MenuItemコントロールは、メニューの1項目を表すコントロールで、Headerプロパティに設定した項目を表示します。上記の使用例のようなメニューを定義するXAMLは以下のようになります。
<Border …省略…><Border.ContextMenu><ContextMenu><MenuItem Header="メニュー1"/><MenuItem Header="メニュー2"/><MenuItem Header="メニュー3"/><MenuItem Header="メニュー4"/></ContextMenu></Border.ContextMenu></Border>
MenuItemコントロールは、Buttonコントロールと同じようにClickイベントがあります。Clickイベントにイベントハンドラを設定することで、MenuItemが押されたときの処理を記述できます。 メニュー1をクリックしたときに、Hello worldというメッセージを表示するには以下のように記述します。
<Border …省略…><Border.ContextMenu><ContextMenu><MenuItem Header="メニュー1"Click="MenuItem_Click"/><MenuItem Header="メニュー2"/><MenuItem Header="メニュー3"/><MenuItem Header="メニュー4"/></ContextMenu></Border.ContextMenu></Border>
コードビハインドには、以下のようなメソッドを定義します。
privatevoid MenuItem_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Hello world"); }
メニューの表示非表示の制御
ContextMenuコントロールは、基本的にマウスの右クリックで表示されますが、IsOpenプロパティを使用することで、プログラムから表示非表示を制御したり、現在表示中かどうか判断することが出来ます。
プロパティ | 説明 |
---|---|
public bool IsOpen { get; set; } | ContextMenuコントロールが表示されているかどうかを取得または設定します。trueのときに表示、falseのときは非表示を表します。 |
メニューの階層表示
階層構造を持ったメニューを定義するには、以下のようにMenuItemを入れ子に定義します。このように定義することでMenuItemのItemsプロパティにMenuItemが設定されて、階層構造を持ったメニューを定義できます。
<ContextMenu><MenuItem Header="メニュー1"Click="MenuItem_Click"/><MenuItem Header="メニュー2"><MenuItem Header="メニュー 2-1" /><MenuItem Header="メニュー 2-2" /><MenuItem Header="メニュー 2-3" /></MenuItem><MenuItem Header="メニュー3"/><MenuItem Header="メニュー4"/></ContextMenu>
実行すると、以下のようにメニュー2に子のメニューが出来ます。
過去記事
- WPF4.5入門 その1 「はじめに」
- WPF4.5入門 その2 「WPFとは」
- WPF4.5入門 その3 「Hello world」
- WPF4.5入門 その4 「Mainメソッドはどこにいった?」
- WPF4.5入門 その5 「全てC#でHello world」
- WPF4.5入門 その6 「WPFを構成するものを考えてみる」
- WPF4.5入門 その7 「XAMLのオブジェクト要素と名前空間」
- WPF4.5入門 その8 「オブジェクト要素のプロパティ」
- WPF4.5入門 その9 「コレクション構文」
- WPF4.5入門 その10 「コンテンツ構文」
- WPF4.5入門 その11 「マークアップ拡張」
- WPF4.5入門 その12 「その他のXAMLの機能」
- WPF4.5入門 その13 「簡単なレイアウトを行うコントロール」
- WPF4.5入門 その14 「レイアウトコントロールのCanvasとStackPanel」
- WPF4.5入門 その15 「レイアウトコントロールのDockPanelとWrapPanel」
- WPF4.5入門 その16 「ViewBoxコントロール」
- WPF4.5入門 その17 「ScrollViewerコントロール」
- WPF4.5入門 その18 「Gridコントロール part 1」
- WPF4.5入門 その19 「Gridコントロール part 2」
- WPF4.5入門 その20 「レイアウトに影響を与えるプロパティ」
- WPF4.5入門 その21 「WPFのコンセプトと重要な機能つまみ食い」
- WPF4.5入門 その22 「Buttonコントロール」
- WPF4.5入門 その23 「DataGridコントロール その1」
- WPF4.5入門 その24 「DataGridコントロール その2」
- WPF4.5入門 その25 「TreeViewコントロール その1」
- WPF4.5入門 その26 「TreeViewコントロール その2」
- WPF4.5入門 その28 「Calendarコントロール」 - かずきのBlog@hatena[C