Меню

Класс Menu позволяет упорядочивать элементы, связанные с командами и обработчиками событий в иерархическом порядке. Каждый Menu элемент содержит коллекцию MenuItem элементов.

Снимок экрана: элемент управления Меню с несколькими пунктами меню.

Стили и шаблоны

Вы можете изменить значение по умолчанию ControlTemplate , чтобы предоставить Menu элементу управления уникальный внешний вид. Дополнительные сведения см. в статье "Что такое стили и шаблоны?", а также как создать шаблон для элемента управления.

Свойство контента

Элемент Menu управления использует Items свойство в качестве свойства содержимого. Это свойство позволяет заполнить Menu коллекцию MenuItem элементов, с которыми пользователи могут взаимодействовать.

Комплектующие

Элемент управления Menu не имеет именованных частей.

При создании ControlTemplate для Menu ваш шаблон может содержать ItemsPresenter внутри ScrollViewer. В ItemsPresenter отображается каждый элемент Menu, а ScrollViewer позволяет прокручивать содержимое элемента управления. Если ItemsPresenter не является прямым дочерним элементом ScrollViewer, необходимо присвоить ItemsPresenter имя ItemsPresenter.

Визуальные состояния

В следующей Menu таблице перечислены визуальные состояния элемента управления.

Имя VisualState Имя VisualStateGroup Description
Действительный ValidationStates Элемент управления использует класс Validation, а связываемое свойство Validation.HasError - это false.
НедействительныйФокус ValidationStates Присоединенное свойство Validation.HasErrortrue определяет, имеет ли элемент управления фокус.
НедействительныйНефокусированный ValidationStates В присоединенном свойстве Validation.HasErrortrue элемент управления не имеет фокуса.

Основные понятия

Важны следующие понятия при работе с Menu элементом управления.

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

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

Используйте свойство InputGestureText для назначения текста сочетания клавиш элементам управления MenuItem. Это только помещает сочетание клавиш в пункт меню. Он не связывает команду с командой MenuItem. Приложение должно обрабатывать входные данные пользователя для выполнения действия.

Command

Command Используйте свойство для связывания таких команд, как Open and Save с MenuItem элементами управления. Свойство команды не только связывает команду с MenuItem, но и предоставляет текст жеста ввода, который можно использовать в качестве ярлыка.

Класс MenuItem также имеет CommandTarget свойство, указывающее элемент, в котором выполняется команда. Если CommandTarget не задано, элемент с фокусом клавиатуры получает команду. Дополнительные сведения о командах см. в разделе "Обзор команд".

Примеры

В следующих примерах показано, как использовать Menu элемент управления в разных сценариях.

Создание меню

Элемент 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

Использование InputGestureText с элементами меню

В следующем примере показано, как использовать свойство InputGestureText для назначение текста сочетания клавиш элементам управления MenuItem.

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

Использование свойства Command с MenuItems

В следующем примере показано, как использовать Command свойство для связывания команд Open and Save с MenuItem элементами управления:

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

См. также