功能表概觀
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
具有鍵盤快速鍵的 MenuItem
鍵盤快速鍵是字元組合,可透過鍵盤輸入來叫用 Menu 命令。 例如,「複製」的快速鍵是 CTRL+C。 有兩個屬性可與鍵盤快速鍵和功能表項目—搭配使用,InputGestureText 或 Command。
InputGestureText
下列範例示範如何使用 InputGestureText 屬性,將鍵盤快速鍵文字指派給 MenuItem 控制項。 這只會將鍵盤快速鍵放在功能表項目中。 它不會將命令與 MenuItem 產生關聯。 應用程式必須處理使用者的輸入,才能執行動作。
<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>
Command
下列範例示範如何使用 Command 屬性,將 [開啟] 和 [儲存] 命令與 MenuItem 控制項產生關聯。 命令屬性不僅會將命令與 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>