Поделиться через


Обзор меню

Класс 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

Сочетания клавиш — это комбинации символов, которые можно ввести с помощью клавиатуры для вызова команд Menu. Например, комбинация клавиш для копирования — CTRL+C. Существует два свойства для использования с сочетаниями клавиш и элементами меню —InputGestureText или Command.

ТекстЖестаВвода

В следующем примере показано, как использовать свойство 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 к отдельным частям элемента управления, изменить поведение частей элемента управления с помощью свойств или добавить дополнительные части или изменить макет элемента управления. В следующих примерах показано несколько способов добавления 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>

См. также

  • Образец галереи элементов управления WPF