Обзор меню
Класс 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>
См. также
.NET Desktop feedback