共用方式為


功能表概觀

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

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 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。 有兩個屬性可與鍵盤快速鍵和功能表項目—搭配使用,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 控制項的方式。

第一個程式碼範例會定義稱為 StyleSimple,它會顯示如何以您的樣式使用目前的系統設定。 此程式碼指派 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>

另請參閱