Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс ContextMenu представляет элемент, который предоставляет функциональные возможности, используя контекстно-специфичный Menu. Компонент ContextMenu прикреплен к определенному элементу управления и позволяет вам предоставить пользователям список элементов, которые перечисляют команды или параметры, связанные с этим элементом управления, например Button.
Обычно пользователи открывают ContextMenu в пользовательском интерфейсе с помощью правой кнопки мыши. Когда пользователи щелкают правой кнопкой мыши на элементе управления, открывается меню. Нажатие MenuItem кнопки обычно открывает подменю или приводит к выполнению команды приложением.
Создание ContextMenu
Вы можете создать ContextMenu, объявив его в XAML или программно в коде.
В следующем примере показано, как объявить контекстное меню в XAML:
<Button Name="cmButton" Height="30" Width="200">
Button with Context Menu
<Button.ContextMenu>
<ContextMenu Name="cm" Opened="Menu_OnOpened" Closed="Menu_OnClosed" StaysOpen="true">
<MenuItem Header="File"/>
<MenuItem Header="Save"/>
<MenuItem Header="SaveAs"/>
<MenuItem Header="Recent Files">
<MenuItem Header="ReadMe.txt"/>
<MenuItem Header="Schedule.xls"/>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
В следующем примере показано, как создать контекстное меню программным способом в коде:
private void CreateContextMenuProgrammatically()
{
Button button = new() { Content = "Created with C#" };
ContextMenu contextMenu = new();
button.ContextMenu = contextMenu;
MenuItem fileMenuItem = new() { Header = "File" };
MenuItem newMenuItem = new() { Header = "New" };
fileMenuItem.Items.Add(newMenuItem);
MenuItem openMenuItem = new() { Header = "Open" };
fileMenuItem.Items.Add(openMenuItem);
MenuItem recentlyOpenedMenuItem = new() { Header = "Recently Opened" };
openMenuItem.Items.Add(recentlyOpenedMenuItem);
MenuItem textFileMenuItem = new() { Header = "Text.xaml" };
recentlyOpenedMenuItem.Items.Add(textFileMenuItem);
contextMenu.Items.Add(fileMenuItem);
// Add the button to your container (implementation depends on your layout)
// containerPanel.Children.Add(button);
}
Private Sub CreateContextMenuProgrammatically()
Dim button As New Button() With {.Content = "Created with Visual Basic"}
Dim contextMenu As New ContextMenu()
button.ContextMenu = contextMenu
Dim fileMenuItem As New MenuItem() With {.Header = "File"}
Dim newMenuItem As New MenuItem() With {.Header = "New"}
fileMenuItem.Items.Add(newMenuItem)
Dim openMenuItem As New MenuItem() With {.Header = "Open"}
fileMenuItem.Items.Add(openMenuItem)
Dim recentlyOpenedMenuItem As New MenuItem() With {.Header = "Recently Opened"}
openMenuItem.Items.Add(recentlyOpenedMenuItem)
Dim textFileMenuItem As New MenuItem() With {.Header = "Text.xaml"}
recentlyOpenedMenuItem.Items.Add(textFileMenuItem)
contextMenu.Items.Add(fileMenuItem)
' Add the button to your container (implementation depends on your layout)
' containerPanel.Children.Add(button)
End Sub
Применение стилей к ContextMenu
Используя управляющий элемент Style, можно значительно изменить внешний вид и поведение ContextMenu без написания пользовательского контрола. Визуальные свойства можно задать и применить стили к частям элемента управления. Например, можно изменить поведение частей элемента управления, воспользовавшись свойствами, и добавить в него новые части, или изменить макет элемента управления ContextMenu. В следующих примерах показано несколько способов добавления стилей в ContextMenu элементы управления.
В первом примере определяется стиль, называемый SimpleSysResources, который показывает, как использовать текущие параметры системы в вашем стиле. Пример назначает MenuHighlightBrushKey как Background цвет и MenuTextBrushKey как Foreground цвет для ContextMenu.
<Style x:Key="SimpleSysResources" TargetType="{x:Type MenuItem}">
<Setter Property = "Background" Value=
"{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
<Setter Property = "Foreground" Value=
"{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
</Style>
В следующем примере элемент Trigger используется для изменения внешнего вида Menu в ответ на события, вызванные на ContextMenu. Когда пользователь перемещает указатель мыши в меню, внешний вид ContextMenu элементов изменяется.
<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Trigger Property="MenuItem.IsMouseOver" Value="true">
<Setter Property = "FontSize" Value="16"/>
<Setter Property = "FontStyle" Value="Italic"/>
<Setter Property = "Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
Стили и шаблоны
В этом разделе описываются стили и шаблоны элемента ContextMenu управления. Вы можете изменить значение по умолчанию ControlTemplate , чтобы предоставить элементу управления уникальный внешний вид. Дополнительные сведения см. в статье "Стили и шаблоны" и"Создание шаблона" для элемента управления.
Свойство контента
Элемент управления ContextMenu использует свойство Items как свойство содержимого, которое содержит пункты меню, отображаемые в контекстном меню.
Комплектующие
Элемент ContextMenu управления не определяет именованные части шаблона.
При создании ControlTemplate для ContextMenu ваш шаблон может содержать ItemsPresenter внутри ScrollViewer.
ItemsPresenter отображает каждый элемент в ContextMenu, а ScrollViewer включает прокрутку внутри элемента управления. Если ItemsPresenter не является прямым дочерним элементом ScrollViewer, необходимо задать для ItemsPresenter имя ItemsPresenter.
Визуальные состояния
В следующей ContextMenu таблице перечислены визуальные состояния элемента управления.
| Имя визуального состояния | Имя группы визуальных состояний | Description |
|---|---|---|
| Действительный | ValidationStates | Элемент управления действителен и не имеет ошибок проверки. |
| НедействительныйФокус | ValidationStates | Элемент управления имеет ошибку проверки и находится в фокусе клавиатуры. |
| НедействительныйНефокусированный | ValidationStates | Элемент управления имеет ошибку проверки, но не имеет фокуса клавиатуры. |
См. также
.NET Desktop feedback