Menu クラスを使用すると、コマンドとイベント ハンドラーに関連付けられている要素を階層的な順序で整理できます。 各 Menu 要素には、MenuItem 要素のコレクションが含まれています。
メニュー コントロール
Menu コントロールには、アプリケーションのコマンドまたはオプションを指定する項目の一覧が表示されます。 通常、MenuItem をクリックするとサブメニューが開くか、アプリケーションでコマンドが実行されます。
メニューの作成
次の例では、Menu内のテキストを操作する TextBox を作成します。 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"/>
コマンド
次の例では、
<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>
こちらも参照ください
.NET Desktop feedback