メニューの概要
Menu クラスを使うと、コマンドおよびイベント ハンドラーに関連付けられている要素を階層順に整理できます。 各 Menu 要素には、MenuItem 要素のコレクションが含まれます。
メニュー コントロール
Menu コントロールには、アプリケーションのコマンドまたはオプションを指定する項目の一覧が表示されます。 通常、MenuItem をクリックすると、サブメニューが開かれるか、またはアプリケーションによってコマンドが実行されます。
メニューの作成
次の例では、TextBox のテキストを操作するための Menu を作成します。 Menu に含まれる MenuItem オブジェクトでは、Command、IsCheckable、Header の各プロパティと、Checked、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"/>
コマンド
次の例では、Command プロパティを使用して、開くコマンドと保存コマンドを MenuItem コントロールに関連付ける方法を示します。 コマンドのプロパティでは、コマンドと MenuItem が関連付けられるだけでなく、ショートカットとして使用する入力ジェスチャのテキストも提供されます。
<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>
MenuItem クラスには CommandTarget プロパティもあり、このプロパティではコマンドが発生する要素を指定します。 CommandTarget が設定されていない場合は、キーボード フォーカスを持つ要素がコマンドを受信します。 コマンドの詳細については、Commanding Overviewを参照してください。
メニューのスタイル指定
コントロールのスタイル設定では、Menu コントロールの動作と外観を大幅に変更できます。カスタム コントロールを作成する必要はありません。 ビジュアル プロパティの設定の他、Style をコントロールの各パーツに適用し、プロパティを使用してコントロールのパーツの動作を変更、パーツを追加またはコントロールのレイアウトを変更できます。 次の例では、Style を Menu コントロールに追加するいくつかの方法を示します。
最初のコード例は、スタイルの現在のシステム設定を使用する方法を示す 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>
次のサンプルでは、Menu で発生したイベントに応じて MenuItem の外観を変更できる Trigger 要素が使用されています。 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>
関連項目
.NET Desktop feedback
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示