WPF_19_菜单

  • A+
所属分类:.NET技术
摘要

WPF提供了两个菜单控件:Menu(用于主菜单)和ContextMenu(用于关联到其他元素的弹出菜单)。


菜单

WPF提供了两个菜单控件:Menu(用于主菜单)和ContextMenu(用于关联到其他元素的弹出菜单)。

Menu类添加了新属性 IsMainMenu,当值为true时(默认值),按下 Alt 键或 F10 键时菜单就会获得焦点。Menu容器还可以使用几个熟悉的 ItemsControl属性,可以使用 ItemsSource,DisplayMemberPath,ItemsTemplate以及ItemTemplateSelector属性,创建使用数据绑定的菜单。

菜单项

菜单由 MenuItem对象和Separator对象构成。MenuItem类继承自 HeaderedItemsControl 类。
当单击MenuItem对象时,可以处理 MenuItem.Click 事件,也可以使用 Command、CommandParameter、以及CommandTarget属性。

为显示缩略图标,需要设置 MenuItem.Icon 属性;如果使用普通图标,可使用具有位图源的 Image 元素。

ContextMenu 类

与 Menu 类一样,ContextMenu类也包含MenuItem对象的集合,区别是ContextMenu对象不能放置在窗口中,只能被用于设置其他元素的ContextMenu属性。

菜单分隔条

Separator对象是将菜单分成相互关联的命令组的标准元素。通过控件模板,可以自定义分隔条的内容。

<Separator>     <Separator.Template>         <ControlTemplate>             <Border CornerRadius="2" Padding="5" Background="PaleGoldenrod"                 BorderBrush="Black" BorderThickness="1">                 <TextBlock FontWeight="Bold">                     Editing Commands                 </TextBlock>             </Border>         </ControlTemplate>     </Separator.Template> </Separator> 

工具栏和状态栏

一般,工具栏包含按钮,而状态栏主要包含文本和其他非交互的指示器(如进度条)。

ToolBar控件

ToolBar控件一般充满了 Button, ComboBox, CheckBox, RadioButton 以及 Separator 对象。

<ToolBar>     <Button Content="{StaticResource DownloadFile}"/>     <CheckBox FontWeight="Bold">Bold</CheckBox>     <CheckBox>         <TextBlock TextDecorations="Underline">Underline</TextBlock>     </CheckBox> </ToolBar> 

ToolBar和其他继承自 ItemsControl 类的控件不同,没有提供专门的封装器类(没有ToolBarItem类)。ToolBar继承自HeaderedItemsControl类,但Header属性不起作用。可以通过将 ToolBar.Orientation属性设置为 Vertical ,从而创建停靠到窗口侧边的竖向工具栏。

如果工具栏里的内容比窗口更宽时,会自动添加溢出菜单,超出的菜单项会自动添加到溢出菜单中。可以通过 ToolBar.OverflowMode属性来设置这一行为的工作方式:

  • OverflowMode.Never - 永远不放到溢出菜单中,超出边界的菜单项被裁剪掉
  • OverflowMode.AsNeeded - 允许菜单项被放到溢出菜单中
  • OverflowMode.Always - 强制菜单项永远保留在溢出菜单中

ToolBarTrary类使得工具栏共享同一行或同一栏更加容易,为整个ToolBar区域提供了阴影背景,并对工具栏拖放功能进行支持。可以通过 Band 属性来确定工具栏应当被放置到哪一栏中。

<ToolBarTray>     <ToolBar>         <Button>One</Button>         <Button>Two</Button>     <ToolBar>     <ToolBar Band="1">         <Button>A</Button>         <Button>B</Button>     <ToolBar> </ToolBarTray> 

StatusBar控件

StatusBar可以包含任何内容(内容被隐式封装到StatusBarItem对象中),并且重写了一些元素的默认样式,使得更合适呈现。不过,StatusBar不支持拖动式的重新排列,也不支持溢出菜单,主要用于显示文本和图像指示器。

功能区

工具栏一直没有演化,因为它们正处在消亡的趋势中。WPF提供了一个功能区版本,但没有包含到 .NET Framework 中,需要从 http://www.microsoft.com/download 下载。

添加功能区

<Window     xmlns:r="clr-namespace:Mircrosoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">     ...     <r:Ribbon>         <r:Ribbon.ApplicationMenu>             <r:RibbonApplicationMenu SmallImageSource="imageswidnow2.png">                 <r:RibbonApplicationMenuItem Header="New" ToolTip="Create a new document"                     ImageSource="imagesnew.png"/>             </r:RibbonApplicationMenu>         </r:Ribbon.ApplicationMenu>     </r:Ribbon> </Window> 

与应用程序菜单一样,大部分 Ribbon 类继承自标准的WPF控件,并在顶部添加了更多功能区。

类名 说明
RibbonButton 可单击的包含文本与图像的按钮
RibbonCheckBox 可选中或取消选中的复选框
RibbonRadioButton 一组互斥选项中的可单击选项
RibbonToggleButton 具有按下状态和取消按下状态的按钮
RibbonMenuButton 可弹出打开菜单的按钮
RibbonSplitButton 被分成两部分的按钮
RibbonComboBox 组合框
RibbonTextBox 文本框
RibbonSeparator 分隔线

富工具提示

如果想使用增强的工具提示,只需要删除标准的ToolTip属性,并使用下面的属性:

属性名 说明
ToolTipTitle 显示在该项工具提示顶部的标题
ToolTipDescription 工具提示中显示在标题下的文本
ToolTipImageSource 显示在工具提示中的图像
ToolTipFooterTitle 显示工具提示页脚标题的文本
ToolTipFooterDescription 显示工具提示页脚部分的文本,位于页脚标题之下
ToolTipFooterImageSource 显示在工具提示页脚文本左侧的图像

快捷键

通过键盘可以访问功能区中的命令,首先需要为选项卡、组和命令指定适当的快捷键。通过设置 RibbonApplicationMenu、每个RibbonTab、每个RibbonMenuItem、RibbonButton或其他功能区控件的 KeyTip 属性来使用快捷键提示功能。

快速访问工具栏

QAT是一个包含常用按钮的窄条,根据用户的选择可能位于功能区其他要素的上面或下面。通过设置 Ribbon.QuickAccessToolBar 属性来创建QAT。

<r:Ribbon.QuickAccessToolBar>     <r:RibbonQuickAccessToolBar>         <r:RibbonButton Label="Undo" SmallImageSource="imagesundo.png">     </r:RibbonQuickAccessToolBar> </r:Ribbon.QuickAccessToolBar> 

我的公众号 HelloProgram

WPF_19_菜单