ContextMenu の概要

ContextMenu クラスは、コンテキスト固有の Menu を使用して機能を公開する要素を表します。 通常、ユーザーはマウス ボタンを右クリックすることによって、ユーザー インターフェイス (UI) に ContextMenu を表示します。 このトピックでは、ContextMenu 要素について説明し、この要素を Extensible Application Markup Language (XAML) とコードで使用する例を示します。

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>
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);
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)

ContextMenu へのスタイルの適用

Style コントロールを使用すると、カスタム コントロールを作成しなくても、ContextMenu の外観と動作を大幅に変更できます。 視覚プロパティの設定に加えて、コントロールの一部にスタイルを適用することもできます。 たとえば、プロパティを使用してコントロールの一部の動作を変更したり、ContextMenu に対するパーツの追加やレイアウトの変更を行ったりできます。 次の例では、ContextMenu コントロールにスタイルを追加する方法をいくつか示します。

最初の例では、SimpleSysResources という名前のスタイルを定義し、スタイルで現在のシステム設定を使用する方法を示します。 この例では、ContextMenuBackground の色として 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>  

関連項目