以下示例创建一个 Menu 来操作 TextBox 中的文本。 Menu 包含 MenuItem 对象,这些对象使用 Command IsCheckable Header 属性以及 Checked Unchecked Click 事件。

<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。 有两个属性可用于键盘快捷方式和菜单项: InputGestureText Command

InputGestureText

以下示例演示如何使用 InputGestureText 属性将键盘快捷方式文本分配到 MenuItem 控件。 这仅将键盘快捷方式放置在菜单项中。 它不会将命令与 MenuItem 相关联。 应用程序必须处理用户的输入才能执行操作。

<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>

以下示例演示如何使用 Command 属性将 Open 和 Save 命令与 MenuItem 控件相关联。 命令属性不仅将命令与 MenuItem 相关联,它还提供输入手势文本以用作快捷方式。

<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>

MenuItem 类还有一个 CommandTarget 属性,该属性指定发生命令的元素。 如果未设置 CommandTarget,则具有键盘焦点的元素接收命令。 有关命令的详细信息,请参阅命令概述

使用菜单样式设置,可以显著更改 Menu 控件的外观和行为,而无需编写自定义控件。 除了设置视觉属性,还可以将 Style 应用到控件的个别部件,通过属性更改控件部件的行为,或者添加其他部件或更改控件的布局。 以下示例演示向 Menu 控件添加 Style 的几种方法。

第一个代码示例定义了称为 SimpleStyle,演示如何在样式中使用当前系统设置。 代码将 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 控件库示例
  • 即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback

    提交和查看相关反馈