Share via


功能表概觀

更新:2007 年 11 月

Menu 類別可讓您以階層順序組織與命令和事件處理常式相關聯的項目。每個 Menu 項目都包含 MenuItem 項目集合。

這個主題包含下列章節。

  • 功能表控制項
  • 建立功能表
  • 具有鍵盤快速鍵的 MenuItems
  • 功能表樣式
  • 相關主題

功能表控制項

Menu 控制項會展示一個項目清單,以指定應用程式的命令或選項。一般來說,按一下 MenuItem 會開啟子功能表,或使應用程式執行命令。

建立功能表

下列範例會建立 Menu,以管理 TextBox 中的文字。Menu 包含 MenuItem 物件,這類物件使用 CommandIsCheckableHeader 屬性以及 CheckedUncheckedClick 事件。

<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。有兩種屬性可以與鍵盤快速鍵和功能表項目搭配使用:InputGestureTextCommand

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>

請參閱

工作

WPF 控制項圖庫範例