次の方法で共有


メニューの概要

Menu クラスを使用すると、コマンドとイベント ハンドラーに関連付けられている要素を階層的な順序で整理できます。 各 Menu 要素には、MenuItem 要素のコレクションが含まれています。

Menu コントロールには、アプリケーションのコマンドまたはオプションを指定する項目の一覧が表示されます。 通常、MenuItem をクリックするとサブメニューが開くか、アプリケーションでコマンドが実行されます。

メニューの作成

次の例では、Menu内のテキストを操作する TextBox を作成します。 Menu には、MenuItemCommand、および IsCheckable プロパティと、HeaderChecked、および Unchecked イベントを使用する Click オブジェクトが含まれています。

<Menu>
  <MenuItem Header="_Edit">
    <MenuItem Command="ApplicationCommands.Copy"/>
    <MenuItem Command="ApplicationCommands.Cut"/>
    <MenuItem Command="ApplicationCommands.Paste"/>
  </MenuItem>
  <MenuItem Header="_Font">
    <MenuItem Header="_Bold" IsCheckable="True"
              Checked="Bold_Checked"
              Unchecked="Bold_Unchecked"/>
    <MenuItem Header="_Italic" IsCheckable="True"
              Checked="Italic_Checked"
              Unchecked="Italic_Unchecked"/>
    <Separator/>
    <MenuItem Header="I_ncrease Font Size"
              Click="IncreaseFont_Click"/>
    <MenuItem Header="_Decrease Font Size"
              Click="DecreaseFont_Click"/>
  </MenuItem>
</Menu>
<TextBox Name="textBox1" TextWrapping="Wrap"
         Margin="2">
  The quick brown fox jumps over the lazy dog.
</TextBox>

private void Bold_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Bold;
}

private void Bold_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Normal;
}

private void Italic_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Italic;
}

private void Italic_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Normal;
}

private void IncreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize < 18)
    {
        textBox1.FontSize += 2;
    }
}

private void DecreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize > 10)
    {
        textBox1.FontSize -= 2;
    }
}

Private Sub Bold_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Bold
End Sub

Private Sub Bold_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Normal
End Sub

Private Sub Italic_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Italic
End Sub

Private Sub Italic_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Normal
End Sub

Private Sub IncreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize < 18 Then
        textBox1.FontSize += 2
    End If
End Sub

Private Sub DecreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize > 10 Then
        textBox1.FontSize -= 2
    End If
End Sub

キーボード ショートカットは、キーボードで入力して Menu コマンドを呼び出すことができる文字の組み合わせです。 たとえば、コピー のショートカットは Ctrl + C です。 キーボード ショートカットとメニュー項目には、InputGestureText または Commandの 2 つのプロパティがあります。

InputGestureText

次の例では、InputGestureText プロパティを使用して、キーボード ショートカット テキストを MenuItem コントロールに割り当てる方法を示します。 これにより、キーボード ショートカットがメニュー項目にのみ配置されます。 コマンドは MenuItemに関連付けされません。 アクションを実行するには、アプリケーションがユーザーの入力を処理する必要があります。

<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>

コマンド

次の例では、 プロパティを使用して Open を関連付け、 の保存コマンド コントロールに関連付ける方法を示します。 コマンド プロパティは、コマンドを MenuItemに関連付けるだけでなく、ショートカットとして使用する入力ジェスチャ テキストも提供します。

<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>

MenuItem クラスには、コマンドが発生する要素を指定する CommandTarget プロパティもあります。 CommandTarget が設定されていない場合、キーボード フォーカスを持つ要素はコマンドを受け取ります。 コマンドの詳細については、「コマンドの概要」を参照してください。

コントロールのスタイル設定を使用すると、カスタム コントロールを記述しなくても、Menu コントロールの外観と動作を大幅に変更できます。 ビジュアル プロパティの設定に加えて、コントロールの個々の部分に Style を適用したり、プロパティを使用してコントロールの一部の動作を変更したり、追加のパーツを追加したり、コントロールのレイアウトを変更したりすることもできます。 次の例では、Style コントロールに Menu を追加するいくつかの方法を示します。

最初のコード例では、スタイルで現在のシステム設定を使用する方法を示す Style と呼ばれる Simple を定義します。 コードは、メニューの背景色として MenuHighlightBrush の色を割り当て、MenuTextBrush をメニューの前景色として割り当てます。 リソース キーを使用してブラシを割り当てることに注意してください。

<Style x:Key="Simple" TargetType="{x:Type MenuItem}">
  <Setter Property = "Background" Value= "{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
  <Setter Property = "Foreground" Value= "{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
  <Setter Property = "Height" Value= "{DynamicResource {x:Static SystemParameters.CaptionHeightKey}}"/>
</Style>

次の例では、Trigger 要素を使用して、MenuItemで発生するイベントに応答して Menu の外観を変更できます。 Menuの上にマウスを移動すると、前景色とメニュー項目のフォント特性が変わります。

<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
  <Style.Triggers>
    <Trigger Property="MenuItem.IsMouseOver" Value="true">
      <Setter Property = "Foreground" Value="Red"/>
      <Setter Property = "FontSize" Value="16"/>
      <Setter Property = "FontStyle" Value="Italic"/>
    </Trigger>
  </Style.Triggers>
</Style>

こちらも参照ください