ContextMenu の概要
更新 : 2007 年 11 月
ContextMenu クラスは、コンテキスト固有の Menu を使用して機能を公開する要素を表します。通常、ユーザーはマウス ボタンを右クリックすることで、ユーザー インターフェイス (UI) に ContextMenu を公開します。ここでは、ContextMenu 要素について説明し、Extensible Application Markup Language (XAML) とコードでそれを使用する例を示します。
このトピックには次のセクションが含まれています。
- ContextMenu コントロール
- ContextMenu の作成
- ContextMenu へのスタイルの適用
- 関連トピック
ContextMenu コントロール
ContextMenu は特定のコントロールに結合されます。ContextMenu 要素を使用すると、Button などの特定のコントロールに関連付けられているコマンドやオプションを指定する項目の一覧を、ユーザーに提供できます。ユーザーは、コントロールを右クリックすることで、メニューを表示します。通常、MenuItem をクリックすると、サブメニューが開くか、アプリケーションがコマンドを実行します。
ContextMenu の作成
サブメニューのある ContextMenu を作成する方法を次の例に示します。ContextMenu コントロールは、ボタン コントロールに結合されます。
<Button Name="cmButton" Height="30">
Button with Context Menu
<Button.ContextMenu>
<ContextMenu Name="cm" Opened="OnOpened" Closed="OnClosed" StaysOpen="true">
<MenuItem Header="File"/>
<MenuItem Header="Save"/>
<MenuItem Header="SaveAs"/>
<MenuItem Header="Recent Files">
<MenuItem Header="ReadMe.txt"/>
<MenuItem Header="Schedule.xls"/>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
Dim btn As New Button()
Dim contextmenu As New ContextMenu()
Dim mi As New MenuItem()
Dim mia As New MenuItem()
btn.Background = Brushes.Red
btn.Height = 30
btn.Content = "Created with Visual Basic."
mi.Header = ("Item 1")
contextmenu.Items.Add(mi)
mia.Header = ("Item 2")
contextmenu.Items.Add(mia)
btn.ContextMenu = (contextmenu)
cv2.Children.Add(btn)
btn = new Button();
btn.Content = "Created with C#";
contextmenu = new ContextMenu();
btn.ContextMenu = contextmenu;
mi = new MenuItem();
mi.Header = "File";
mia = new MenuItem();
mia.Header = "New";
mi.Items.Add(mia);
mib = new MenuItem();
mib.Header = "Open";
mi.Items.Add(mib);
mib1 = new MenuItem();
mib1.Header = "Recently Opened";
mib.Items.Add(mib1);
mib1a = new MenuItem();
mib1a.Header = "Text.xaml";
mib1.Items.Add(mib1a);
contextmenu.Items.Add(mi);
cv2.Children.Add(btn);
ContextMenu へのスタイルの適用
コントロールの Style を使用すると、カスタム コントロールを作成しなくても、ContextMenu の外観や動作を大幅に変更できます。視覚プロパティの設定に加えて、コントロールの一部にスタイルを適用することもできます。たとえば、プロパティを使用したコントロールの動作を一部変更したり、ContextMenu に対するパーツの追加やレイアウトの変更を行ったりすることができます。ContextMenu コントロールにスタイルを追加するいくつかの方法を次の例に示します。
最初の例は、SimpleSysResources という名前のスタイルを定義し、スタイルで現在のシステム設定を使用する方法を示しています。この例では、ContextMenu の Background の色として MenuHighlightBrushKey を割り当て、Foreground の色として MenuTextBrushKey を割り当てています。
<Style x:Key="SimpleSysResources" TargetType="{x:Type MenuItem}">
<Setter Property = "Background" Value=
"{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
<Setter Property = "Foreground" Value=
"{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
</Style>
次の例では、Trigger 要素を使用して、ContextMenu で発生するイベントに応じて Menu の外観を変更しています。ユーザーがメニューの上にマウスを移動すると、ContextMenu 項目の外観が変わります。
<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Trigger Property="MenuItem.IsMouseOver" Value="true">
<Setter Property = "FontSize" Value="16"/>
<Setter Property = "FontStyle" Value="Italic"/>
<Setter Property = "Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
参照
処理手順
概念
ContextMenu ControlTemplate の例