WPF 控件专题 Menu 控件详解

1、Menu 介绍

    Menu 表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素。

    该 Menu 控件提供一个项列表,用于指定应用程序的命令或选项。 通常,单击菜单上的项会打开子菜单或导致应用程序执行命令。

    Menu 是一个 ItemsControl,这意味着它可以包含任何类型 (的对象集合,例如字符串、图像或面板) 。

    每个 Menu 可以包含多个 MenuItem 控件。每个 MenuItem 都可调用命令或调用 Click 事件处理程序。MenuItem 也可以有多个 MenuItem 元素作为子项,从而构成子菜单。

**************************************************************************************************************

2、常用属性介绍

    FontFamily:字体系列;    FontSize:字体大小;    FontStretch:字体在屏幕上紧缩或加宽的程度;FontWeight:字体粗细;
    
    Background:背景;    BorderBrush:边框颜色;    BorderThickness:边框宽度;    Foreground:前景色;
    
    Width/Height:宽度/高度;    Name:元素标识名称;    IsEnabled:使能,是否可用;    Margin:外边距;
    
    Opacity:透明度;    Visibility:可见性;    IsVisible:是否可见;    FlowDirection:其子元素的流动方向;
    
    LayoutTransform:在执行布局时应该应用于此元素的图形转换方式。    RenderTransform:元素的呈现位置的转换信息;
    
    RenderTransformOrigin:由RenderTransform声明的任何可能呈现转换的中心点,相对于元素的边界。
    
    HorizontalAlignment/VerticalAlignment:在父元素中组合此元素时所应用的水平对齐特征/垂直对齐特征。
    
    HorizontalContentAlignment/VerticalContentAlignment:控件内容的水平对齐方式/垂直对齐方式。

    Items:获取用于生成 ItemsControl 的内容的集合。ItemTemplate:获取或设置用来显示每个项的 DataTemplate。
    
    ItemsPanel:获取或设置模板,该模板定义对项的布局进行控制的面板。
    
    ItemsSource:获取或设置用于生成 ItemsControl 的内容的集合。

    IsMainMenu:获取或设置一个值,该值指示此 Menu 是否接收主菜单激活通知。

    SnapsToDevicePixels:获取或设置一个值,该值确定在呈现过程中,此元素的呈现是否应使用特定于设备的像素设置。    
    
    ContextMenu:获取或设置通过用户界面请求上下文菜单时应显示的上下文菜单元素, (UI 从此元素中) 。

**************************************************************************************************************

3、具体示例代码

<Window.Resources>
	<!--定义命令-->
	<RoutedUICommand x:Key="cmdModify" />
</Window.Resources>
<!--将命令与处理程序关联起来-->
<Window.CommandBindings>
	<CommandBinding Command="{StaticResource cmdModify}" Executed="ModifyLog_Click"/>
</Window.CommandBindings>
<Grid>
	<Menu Height="30" VerticalAlignment="Top" IsMainMenu="False" VerticalContentAlignment="Center" Margin="10">
		<MenuItem Header="查询中心" VerticalContentAlignment="Center" Height="30" Width="80" >
				<MenuItem Header="查询">
					<!--设置图标-->
					<MenuItem.Icon>
					<Image Source="/huahua.png" />
					</MenuItem.Icon>
					<MenuItem Header="按姓名查询" Click="QueryName_Click"/>
				<MenuItem Header="按性别查询"/>
				<MenuItem Header="按按城市查询"/>
			</MenuItem>
			<MenuItem Header="修改记录查询" Command="{StaticResource cmdModify}" CommandParameter="modfiy"/>
			<MenuItem Header="说明文档查询"/>
			<MenuItem Header="软件版本查询" Click="QueryVer_Click"/>
		</MenuItem>

		<Rectangle Width="1" Height="20"  Margin="2" Fill="#4e6ef2" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>

		<MenuItem Header="查询中心2" VerticalContentAlignment="Center" Height="30" Width="80">
			<MenuItem Header="查询">
				<!--设置图标-->
				<MenuItem.Icon>
					<Image Source="/huahua.png" />
				</MenuItem.Icon>
				<MenuItem Header="按姓名查询"/>
				<MenuItem Header="按性别查询"/>
				<MenuItem Header="按按城市查询"/>
			</MenuItem>
			<MenuItem Header="修改记录查询"/>
			<MenuItem Header="说明文档查询"/>
			<MenuItem Header="软件版本查询"/>
		</MenuItem>
	</Menu>
</Grid>

后台代码

public partial class MainWindow : Window
{
	public MainWindow()
	{
		InitializeComponent();
	}

	private void QueryName_Click(object sender, RoutedEventArgs e)
	{
		MessageBox.Show("按姓名查询!!!");
	}

	private void QueryVer_Click(object sender, RoutedEventArgs e)
	{
		MessageBox.Show("按版本号查询!!!");
	}


	private void ModifyLog_Click(object sender, ExecutedRoutedEventArgs e)
	{
		MessageBox.Show("按修改记录查询!!!");
	}
}

**************************************************************************************************************

4、效果图

**************************************************************************************************************

5、总结和扩展

    IsMainMenu 是否接收主菜单激活通知 true 按alt或f10 激活,如果为false ,不能激活。

    快捷键事件响应示例:

<!--输入绑定  Key   Mouse-->
<Window.InputBindings>
	<KeyBinding Command="{StaticResource cmdModify}" Gesture="Ctrl+R" />
</Window.InputBindings>

**************************************************************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值