メニューの概要
Menu クラスを使用すると、コマンドおよびイベント ハンドラーに関連付けられている要素を階層順に編成できます。 各 Menu 要素には、MenuItem 要素のコレクションが含まれています。
このトピックは、次のセクションで構成されています。
- Menu コントロール
- メニューの作成
- キーボード ショートカットを持つ MenuItem
- メニュー スタイル
- 関連トピック
Menu コントロール
Menu コントロールは、アプリケーションのコマンドまたはオプションを指定する項目の一覧を示します。 通常、MenuItem をクリックすると、サブメニューが開くか、アプリケーションがコマンドを実行します。
メニューの作成
TextBox を作成して Menu のテキストを操作する例を次に示します。 Menu には、Command、IsCheckable、Header の各プロパティと、Checked、Unchecked、Click の各イベントを使用する MenuItem が含まれています。
<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 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
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;
}
}
キーボード ショートカットを持つ MenuItem
キーボード ショートカットは、キーボードで入力できる文字の組み合わせで、Menu コマンドを起動するために使用されます。 たとえば、[コピー] のショートカットは Ctrl + C キーです。 キーボード ショートカットとメニュー項目で使用するプロパティには、InputGestureText と Command の 2 つがあります。
InputGestureText
次の例は、InputGestureText プロパティを使用して、キーボード ショートカット テキストを MenuItem コントロールに割り当てる方法を示しています。 これは、メニュー項目にキーボード ショートカットを配置するだけです。 これによってコマンドが MenuItem に関連付けられることはありません。 アプリケーションが、ユーザーの入力を処理し、アクションを実行する必要があります。
<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>
コマンド
Command プロパティを使用して、[Open] コマンドと [Save] コマンドに MenuItem コントロールを関連付ける方法を、次の例に示します。 コマンド プロパティは、コマンドを MenuItem に関連付けるだけでなく、ショートカットとして使用する入力ジェスチャのテキストも提供します。
<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>
MenuItem クラスには CommandTarget プロパティもあります。これは、コマンドが発生する要素を指定します。 CommandTarget が設定されていない場合は、キーボード フォーカスが設定されている要素がコマンドを受け取ります。 コマンドの詳細については、「コマンド実行の概要」を参照してください。
メニュー スタイル
コントロールにスタイルを指定することで、カスタム コントロールを作成することなく、Menu コントロールの外観と機能を動的に変更できます。 視覚プロパティの設定に加え、コントロールの個々の部分に Style を適用し、プロパティを使用してコントロールの一部の動作を変更したり、コントロールのレイアウトを変更したりできます。 次の例は、Menu コントロールに Style を追加するいくつかの方法を示しています。
最初のコード例は、Simple という Style を定義し、独自のスタイルで現在のシステム設定を使用する方法を示しています。 このコードは、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>