Menu クラスを使用すると、コマンドとイベント ハンドラーに関連付けられている要素を階層的な順序で整理できます。 各 Menu 要素には、 MenuItem 要素のコレクションが含まれています。
スタイルとテンプレート
既定の ControlTemplate を変更して、 Menu コントロールに一意の外観を与えることができます。 詳細については、「 スタイルとテンプレートとは」 および 「コントロールのテンプレートを作成する方法」を参照してください。
コンテンツ プロパティ
Menu コントロールは、Items プロパティをコンテンツ プロパティとして使用します。 このプロパティを使用すると、ユーザーが操作できるMenu要素のコレクションをMenuItemに設定できます。
部品
Menu コントロールには名前付きパーツがありません。
ControlTemplateのMenuを作成する際に、テンプレートにはItemsPresenterがScrollViewer内に含まれている場合がある可能性があります。
ItemsPresenterは、Menu内の各項目を表示します。ScrollViewerはコントロール内をスクロールできるようにします。
ItemsPresenterがScrollViewerの直接の子でない場合は、ItemsPresenterItemsPresenter名前を指定する必要があります。
ビジュアル状態
次の表に、 Menu コントロールの表示状態を示します。
| VisualState 名称 | VisualStateGroupの名前 | Description |
|---|---|---|
| 有効 | 検証状態 | コントロールは Validation クラスを使用し、 Validation.HasError 添付プロパティが false。 |
| 無効フォーカス | 検証状態 |
Validation.HasError添付プロパティは、コントロールがフォーカスされていることを示しますtrue。 |
| フォーカスが外れた無効状態 | 検証状態 |
Validation.HasError 添付プロパティは、コントロールがフォーカスされていない場合に、true が適用されます。 |
重要な概念
Menu コントロールを操作する場合は、次の概念が重要です。
キーボード ショートカットを含むメニュー項目
キーボード ショートカットは、 Menu コマンドを呼び出すためにキーボードで入力できる文字の組み合わせです。 たとえば、 コピー のショートカットは Ctrl + C です。 キーボード ショートカットとメニュー項目には、InputGestureText または Commandの 2 つのプロパティを使用できます。
入力ジェスチャーテキスト
InputGestureText プロパティを使用して、キーボード ショートカット テキストをMenuItem コントロールに割り当てます。 これにより、キーボード ショートカットがメニュー項目にのみ配置されます。 コマンドは MenuItemに関連付けられません。 アクションを実行するには、アプリケーションがユーザーの入力を処理する必要があります。
Command
Command プロパティを使用して、[開く] や [保存] などのコマンドをMenuItem コントロールに関連付けます。 コマンド プロパティは、コマンドを MenuItemに関連付けるだけでなく、ショートカットとして使用する入力ジェスチャ テキストも提供します。
MenuItem クラスには、コマンドが発生する要素を指定するCommandTarget プロパティもあります。 CommandTargetが設定されていない場合、キーボード フォーカスを持つ要素はコマンドを受け取ります。 コマンドの詳細については、「 コマンドの概要」を参照してください。
例示
次の例では、さまざまなシナリオで Menu コントロールを使用する方法を示します。
メニューの作成
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
MenuItems での InputGestureText の使用
次の例では、 InputGestureText プロパティを使用して、キーボード ショートカット テキストを MenuItem コントロールに割り当てる方法を示します。
<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>
MenuItems での Command プロパティの使用
次の例では、 Command プロパティを使用して 、[開く ] コマンドと [保存] コマンドを MenuItem コントロールに関連付ける方法を示します。
<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>
こちらも参照ください
.NET Desktop feedback