WPF菜单

本文详细介绍了WPF中的Menu、ContextMenu和ToolBar等UI控件的功能及使用方法,包括属性、事件、键盘导航等,并提供了TreeView和StatusBar的使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Menu
  • Menu 是水平放置它的项的,默认情况下把灰色栏作为背景。
  • 把Menu 添加到它的ItemsControl 基类的唯一公开的API 是IsMainMenu 属性。当为true(默认的)时,用户按下Alt 或者F10 键,菜单获得焦点。
  • MenuItem 是带头的Items 控件(继承自HeaderedItemControl),它的头实际上是主对象。如果Items 是子元素的话就会被作为
    子菜单显示。MenuItem 使用下划线前缀来支持访问键(access key)。
  • Separator(分隔线)是一种简单控件。
  • Icon——允许把任意类型的对象添加到Header 旁边。Icon 对象会像Header 一样被渲染,尽管它通常是一幅小图片。
  • IsCheckable——让MenuItem 的行为像一个CheckBox 控件。
  • InputGestureText——用一个相关的手势(gesture)来标识一个项(最常见的就是键盘快捷方式,比如Ctrl+O)。
  • 5个事件:Checked、Unchecked、SubmenuOpened、SubmenuClosed 和Click。
  • 要为MenuItem 设置一个键盘快捷键,你应该用它的Command 属性。


2、ContextMenu(上下文菜单)

  • 是一种保存MenuItem 和Separator 的简单容器。但不能直接把ContextMenu 嵌入到一个元素树中,必须通过一个适当的属性把它加载到控件上。
  • IsOpen 属性以及Opened/Closed 事件。
  • 默认情况下,菜单左上角位于鼠标指针处,但是可以把它的Placement 改成一个非MousePoint 的值(如Absolute),或者设置它的HorizontalOffset 以及VerticalOffset 属性,来调整这个行为。
  • ContextMenuService 静态类,它包含了许多附加属性,分别对应那些由ContextMenu 直接定义的属性。

3、其他Items 控件
A、TreeView
  • 用可展开和折叠的节点来分层显示数据。
  • 在TreeView 中一定要显式地用TreeViewItem 包装Item,用TreeViewItem来填充,TreeViewItem 就像MenuItem 一样,是一种带有头的控件,它的Header 属性包含着当前的项,而它的Items 集合中保存着子项(子项也是TreeViewItem)。
  • TreeViewItem 有两个方便的属性IsExpanded 和IsSelected。还有4 个事件,分别对应于这两个属性的4种状态:Expanded、Collapsed、Selected 和Unselected。
  • 同样支持富键盘导航,加号和减号键可以展开或折叠一个项,箭头方向键、Page Up、Page Down、Home 和End 键可以从一个项向另一个项移动焦点。
B、ToolBar
  • 对许多小的按钮(或者其他控件)进行分组。
  • ToolBar 可以被放在元素树的任何地方,但是通常把它们放在一个叫作ToolBarTray 的FrameworkElement 中。
  • 用户就可以拖曳ToolBar 或重新定义ToolBar,。除非ToolBarTray的IsLocked 属性被设置为true。
  • ToolBarTray 有一个Orientation 属性,可以把它设置为Vertical 使其所有的ToolBar 垂直排列项。
  • 默认都是最后一个元素第一个被移到溢出区域,但是你能通过OverflowMode 附加属性来控制每个项的溢出行为。有了这个属性,你就可以把一个项标记为AsNeeded(默认,按需要溢出)、Always 或Never。
  • System.Windows.Input 命名空间中的KeyboardNavigat ion 类定义了一些用来自定义键盘行为的附加属性。
  • ToolBar 实际上是一个带有头的Item 控件(就像MenuItem 和TreeViewItem)。它的Header 属性从来不会被显示,但是它可以被用来实现ToolBarTray 的其他特性。
C、StatusBar
    • StatusBar 的行为就像Menu,它只是水平排列放它的项,通常用在窗口底部,以显示状态信息。
    • StatusBar 为Separator 提供了一个控件模板,Separator 是作为垂直线被渲染的。
    • StatusBar 中的项(除了Separator)是被隐式地包装在一个StatusBarItem 中,但是你依然能显式地进行包装。
### WPF 菜单与下拉框实现 #### 工具栏 (ToolBar) 的使用 在 Windows Presentation Foundation (WPF),`ToolBar` 控件用于提供一组常用的命令按钮,这些按钮可以快速访问应用程序的功能。为了构建一个完整的工具栏,通常会结合 `ToolBarTray` 使用,这允许放置多个工具栏并管理它们的位置和外观[^1]。 下面是一个简单的 XAML 示例来展示如何设置基本的 `ToolBar`: ```xml <Window x:Class="Toolbars.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title="MainWindow"> <DockPanel> <!-- 创建 ToolBarTray 容器 --> <ToolBarTray DockPanel.Dock="Top"> <ToolBar Band="1" BandIndex="1"> <Button Content="New"/> <Button Content="Open"/> <Separator/> <Button Content="Save"/> </ToolBar> </ToolBarTray> <!-- 主窗口内容区 --> <ContentControl /> </DockPanel> </Window> ``` 此代码片段展示了如何创建带有三个按钮 (`New`, `Open`, 和 `Save`) 及分隔符的简单工具栏。 #### DataGrid 下拉列表项源绑定 对于希望在数据网格视图内显示可编辑字段的应用程序来说,`DataGridComboBoxColumn` 提供了一种方便的方法来呈现具有预定义选项集的选择列。当需要从外部资源(如数据库查询的结果)加载组合框的内容时,则可以在 C# 后端逻辑中处理这一过程[^2]。 这里给出一段简化版的例子说明怎样动态填充 `DataGrid` 列的数据源: ```csharp // 假设有一个名为 'dataGrid' 的 DataGrid 对象存在于窗体上, // 并且已经关联了一个 ItemsSource 属性指向某些业务对象集合。 var column = new DataGridComboBoxColumn(); column.Header = "Category"; column.SelectedItemBinding = new Binding("SelectedCategoryId"); column.SelectedValuePath = "Id"; // 绑定到实体类 Id 字段 column.DisplayMemberPath = "Name"; // 显示名称而非 ID // 设置 ComboBox 数据源为 Categories 表记录 using (var context = new YourDbContext()) { var categories = await context.Categories.ToListAsync(); column.ItemsSource = categories; } this.dataGrid.Columns.Add(column); ``` 上述代码实现了向现有 `DataGrid` 添加一列作为下拉选择框,并将其项目源设定为来自数据库表 “Categories”的条目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值