功能表概觀
Menu 類別可讓您以階層順序組織與命令和事件處理常式相關聯的項目。 每個 Menu 項目都包含 MenuItem 項目集合。
這個主題包含下列章節。
- 功能表控制項
- 建立功能表
- 具有鍵盤快速鍵的 MenuItems
- 功能表樣式
- 相關主題
功能表控制項
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 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;
}
}
具有鍵盤快速鍵的 MenuItems
鍵盤快速鍵是使用鍵盤輸入的字元組合,可以叫用 (Invoke) 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 控制項的方式。
第一個程式碼範例會定義稱為 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>