赞
踩
Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->ItemsControl->MenuBase->Menu
表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素。
Menu控件提供了一个项列表,这些项指定了应用程序的命令或选项。 通常,单击菜单上的项将打开子菜单或使应用程序执行命令。
Menu 是 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。 MenuItem是 Menu 中最常见的项类型。 MenuItem可以包含子项。 当用户选择父项时,子菜单项将出现在 MenuItem 子菜单中。
若要对多个 Menu 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于Menu 的部分和状态,请 参阅 菜单样式和模板。
此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。
只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。
名称 | 备注 | 权限 |
---|---|---|
标识 IsMainMenu 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
获取或设置一个值,该值指示此 Menu 是否接收主菜单激活通知。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
在按下或释放任意鼠标按钮时调用。 | protected | |
提供 MenuAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。 | protected | |
当 IsInitialized 属性设置为 true 时调用。 | protected | |
响应 KeyDown 事件。 | protected | |
处理 TextInput 路由事件,该事件在菜单接收来自任何设备的文本输入时发生。 | protected | |
准备好指定的元素以显示指定的项。 | protected |
表示 Menu 内某个可选择的项。
MenuItem 是一个 HeaderedItemsControl ,它表示对象的标头和集合可以是任何类型 (例如字符串、图像或面板) 。 有关更多信息,请参见 HeaderedItemsControl 类。
MenuItem可以具有子菜单。MenuItem 的子菜单由 MenuItem 的中的ItemCollection 对象组成 。 通常, MenuItem 包含其他 MenuItem 对象来创建嵌套的子菜单。
MenuItem可以具有以下多个函数之一:
可以选择它来调用命令。
它可以是其他菜单项的分隔符。
它可以是子菜单的标头。
可以选中或取消选中此项。
默认情况下,MenuItem 的 HorizontalAlignment 设置为 HorizontalAlignment.Stretch 。 StackPanel 的默认水平位置 是 HorizontalAlignment.Center 。 如果通过StackPanel 设置MenuItem 的Width 属性,则将StackPanel 的默认值传递给MenuItem ,将项目居中。
MenuItem的MouseDown事件,如果您用一个的MouseDown事件来处理,你的处理方法将永远不会被调用。要添加自己的处理程序,订阅PreviewMouseDown事件或订阅MouseDown通过调用 AddHandler(RoutedEvent, Delegate, Boolean)与handledEventsToo
设置为true
。
若要将相同的属性设置应用于多个MenuItem控件,请使用“样式”属性。您可以修改默认的ControlTemplate以使控件具有唯一的外观。有关创建ControlTemplate的更多信息,请参见通过创建ControlTemplate自定义现有控件的外观。若要查看特定于MenuItem的部分和状态,请参见菜单样式和模板。
此控件的依赖项属性可以由控件的默认样式设置。如果使用默认样式设置属性,则当控件出现在应用程序中时,该属性可能会从其默认值更改。默认样式由运行应用程序时使用的桌面主题确定。有关更多信息,请参见默认WPF主题。
设置视觉属性仅在该属性同时存在于控件的默认模板中并且通过使用TemplateBinding进行设置时才有效。您可以在通过创建ControlTemplate定制现有控件的外观的“更改控件的视觉结构”部分中找到视觉属性列表。
名称 | 备注 | 权限 |
---|---|---|
标识 Checked 路由事件。 | public static readonly | |
标识 Click 路由事件。 | public static readonly | |
标识 CommandParameter 依赖项属性。 | public static readonly | |
标识 Command 依赖项属性。 | public static readonly | |
标识 CommandTarget 依赖项属性。 | public static readonly | |
标识 Icon 依赖项属性。 | public static readonly | |
标识 InputGestureText 依赖项属性。 | public static readonly | |
标识 IsCheckable 依赖项属性。 | public static readonly | |
标识 IsChecked 依赖项属性。 | public static readonly | |
标识 IsHighlighted 依赖项属性。 | public static readonly | |
标识 IsPressed 依赖项属性。 | public static readonly | |
标识 IsSubmenuOpen 依赖项属性。 | public static readonly | |
标识 IsSuspendingPopupAnimation 依赖项属性。 | public static readonly | |
ItemContainerTemplateSelectorProperty
| 标识 ItemContainerTemplateSelector 依赖项属性。 | public static readonly |
标识 Role 依赖项属性。 | public static readonly | |
标识 StaysOpenOnClick 依赖项属性。 | public static readonly | |
标识 SubmenuClosed 路由事件。 | public static readonly | |
标识 SubmenuOpened 路由事件。 | public static readonly | |
标识 Unchecked 路由事件。 | public static readonly | |
标识 UsesItemContainerTemplate 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
获取或设置与菜单项关联的命令。 | get; set; | |
获取或设置要传递给 Command 的 MenuItem 属性的参数。 | get; set; | |
获取或设置在其上引发指定命令的目标元素。 | get; set; | |
获取控件是否支持滚动。 | get; | |
获取或设置显示在 MenuItem 中的图标。 | get; set; | |
设置文本,以描述将调用与指定项关联的命令的输入笔势。 | get; set; | |
获取一个指示是否可选中 MenuItem 的值。 | get; | |
获取或设置一个指示是否选中 MenuItem 的值。 | get; set; | |
获取一个值,该值指示当前菜单项的 IsEnabled 属性是否为 true 。 | get; | |
获取一个指示是否突出显示 MenuItem 的值。 | get; | |
获取一个指示是否按下 MenuItem 的值。 | get; | |
获取或设置一个值,该值指示是否打开 MenuItem 的子菜单。 | get; set; | |
获取菜单是否对其 Popup 控件挂起动画。 | get; | |
获取或设置用于选择用来显示每个项的模板的自定义逻辑。 | get; set; | |
获取一个值,该值指示 MenuItem 的角色。 | get; | |
获取当 MenuItem 为 MenuItem 时应用于 Separator 的样式的资源键。 | get; | |
获取或设置一个值,该值指示在单击此 MenuItem 时,该项所在的子菜单不应关闭。 | get; set; | |
获取当 MenuItem 为子菜单标头时应用于 MenuItem 的样式的资源键。 | get; | |
获取当 MenuItem 为子菜单时应用于 MenuItem 的样式的资源键。 | get; | |
获取当 MenuItem 为顶级菜单标头时应用于 MenuItem 的样式的资源键。 | get; | |
获取当 MenuItem 为可调用命令的顶级 MenuItem 时应用于它的样式的资源键。 | get; | |
获取或设置指示菜单是根据基础集合中项的类型还是一些其他的启发方法来选择不同的项容器的值。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
创建或标识用于显示指定项的元素。 | protected | |
确定指定项是否是(或者是否可以作为)自己的 ItemContainer 。 | protected | |
在调用此控件的 AccessKey 时响应 | protected | |
在生成模板树时调用。 | public | |
在 IsChecked 属性变为 true 时调用。 此方法引发 Checked 路由事件。 | protected | |
在单击 MenuItem 并引发 Click 事件时调用。 | protected | |
提供 MenuItemAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。 | protected | |
宣布键盘焦点位于此元素上。 | protected | |
在 IsInitialized 属性设置为 true 并引发 Initialized 事件时调用。 | protected | |
当焦点不再在 MenuItem 之上或之内时调用。 | protected | |
当 Items 属性更改时调用。 | protected | |
响应 KeyDown 事件。 | protected | |
每当鼠标进入 MenuItem 时调用。 | protected | |
每当鼠标离开 MenuItem 时调用。 | protected | |
在按下鼠标左键时调用。 | protected | |
在释放鼠标左键时调用。 | protected | |
在鼠标移到菜单项上时调用。 | protected | |
在按下鼠标右键时调用。 | protected | |
在释放鼠标右键时调用。 | protected | |
在关闭 MenuItem 的子菜单时调用。 | protected | |
在打开 MenuItem 的子菜单时调用。 | protected | |
在 IsChecked 属性变为 false 时调用。 此方法引发 Unchecked 路由事件。 | protected | |
在可视 MenuItem 的父级更改时调用。 | protected | |
准备好指定的元素以显示指定的项。 | protected | |
用于确定是否对项容器应用样式。 | protected |
名称 | 备注 |
---|---|
在选中菜单项时发生。 | |
在单击 MenuItem 时发生。 | |
在 IsSubmenuOpen 属性的状态更改为 false 时发生。 | |
在 IsSubmenuOpen 属性的状态更改为 true 时发生。 | |
在未选中 MenuItem 时发生。 |
- <Window x:Class="MenuDemo.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:MenuDemo"
- mc:Ignorable="d"
- Title="MainWindow" Height="450" Width="800">
- <!--命令绑定-->
- <Window.Resources>
- <RoutedCommand x:Key="OpenCommand"/>
- </Window.Resources>
- <Window.CommandBindings>
- <CommandBinding Command="{StaticResource OpenCommand}" Executed="OnOpen"/>
- </Window.CommandBindings>
- <!--快捷键-->
- <Window.InputBindings>
- <KeyBinding Command="{StaticResource OpenCommand}" Gesture="Ctrl+O"/>
- </Window.InputBindings>
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="20"/>
- <RowDefinition/>
- <RowDefinition Height="20"/>
- </Grid.RowDefinitions>
- <StackPanel>
- <Menu IsMainMenu="False">
- <MenuItem Header="_File">
- <MenuItem Header="_Open" Command="{StaticResource OpenCommand }" InputGestureText="Ctrl+O"/>
- <MenuItem Header="_Closed" Click="OnClosed"/>
- </MenuItem>
- <MenuItem Header="_Edit"/>
- </Menu>
- </StackPanel>
- <StackPanel Grid.Row="2" >
- <Menu IsMainMenu="True">
- <MenuItem Header="_View" >
- <MenuItem Header="_Left"/>
- <MenuItem Header="_Right"/>
- </MenuItem>
- <MenuItem Header="_Help" />
- </Menu>
- </StackPanel>
- </Grid>
- </Window>
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
-
- namespace MenuDemo
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
-
- private void OnOpen(object sender, ExecutedRoutedEventArgs e)
- {
- MessageBox.Show("你使用了Open命令!");
- }
-
- private void OnClosed(object sender, RoutedEventArgs e)
- {
- this.Close();
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
-
- namespace MenuDemo
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
-
- public MainWindow()
- {
- InitializeComponent();
- RowDefinition row0 = new RowDefinition { Height = new GridLength(20.0) };
- RowDefinition row1 = new RowDefinition ();
- RowDefinition row2 = new RowDefinition { Height = new GridLength(20.0) };
- (this.Content as Grid).RowDefinitions.Add(row0);
- (this.Content as Grid).RowDefinitions.Add(row1);
- (this.Content as Grid).RowDefinitions.Add(row2);
-
- Menu menu0 = new Menu { IsMainMenu = false };
- MenuItem menuFile = new MenuItem { Header= "_File" };
-
- RoutedCommand OpenCommand = new RoutedCommand();
- CommandBinding command = new CommandBinding {Command= OpenCommand};
- this.CommandBindings.Add(command);
- KeyBinding keyBinding = new KeyBinding { Command = OpenCommand };
- this.InputBindings.Add(keyBinding);
- keyBinding.Gesture = new KeyGesture(Key.O, ModifierKeys.Control);
- command.Executed += OnOpen;
-
- MenuItem menuOpen = new MenuItem { Header = "_Open", InputGestureText = "Ctrl+O" , Command = OpenCommand };
-
- MenuItem menuClosed = new MenuItem { Header = "_Closed" };
- menuClosed.Click += OnClosed;
- MenuItem menuEdit = new MenuItem { Header = "_Edit" };
- menuFile.Items.Add(menuOpen);
- menuFile.Items.Add(menuClosed);
- menu0.Items.Add(menuFile);
- menu0.Items.Add(menuEdit);
-
- Menu menu1 = new Menu { IsMainMenu = true };
- MenuItem menuView = new MenuItem { Header = "_View" };
- MenuItem menuLeft = new MenuItem { Header = "_Left" };
- MenuItem menuRight = new MenuItem { Header = "_Right" };
- MenuItem menuHelp = new MenuItem { Header = "_Help" };
- menuView.Items.Add(menuLeft);
- menuView.Items.Add(menuRight);
- menu1.Items.Add(menuView);
- menu1.Items.Add(menuHelp);
-
-
- StackPanel stackPanel0 = new StackPanel();
- StackPanel stackPanel1 = new StackPanel();
- stackPanel0.Children.Add(menu0);
- stackPanel1.Children.Add(menu1);
- Grid.SetRow(stackPanel1, 2);
- (this.Content as Grid).Children.Add(stackPanel0);
- (this.Content as Grid).Children.Add(stackPanel1);
- }
-
-
-
-
- private void OnOpen(object sender, ExecutedRoutedEventArgs e)
- {
- MessageBox.Show("你使用了Open命令!");
- }
-
- private void OnClosed(object sender, RoutedEventArgs e)
- {
- this.Close();
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。