在Office 2007 和Windows 7 两款产品中微软开始引入了一种新概念:“Ribbon 工具栏”,Ribbon 工具栏的界面设计模式可以使用户方便快捷的找到所需的工具,同时这种直观的设计形式有助于用户发现软件其他功能特性,以便更好的了解应用程序的功能。

设计Ribbon 的目的本身就是要替代以往的老式工具栏,使应用程序的使用更加便捷。当然微软也为开发人员提供了Ribbon 工具栏的控件库(WPF Ribbon Control),方便大家开发出带有类似Office 2007 Ribbon 工具栏的应用程序。

获得Office UI 授权

在进行Ribbon 开发前首先需要获得Office UI 授权,并下载Ribbon 控件库(DLL)。进入授权页面点击“License the Office UI”。

用Windows Live ID 登录并填写个人信息,进入下载页面获得“WPF Ribbon Control”(注,该程序目前只是CTP 版本)。除此之外也可以下载其他相关资料。

Ribbon 界面结构

下载Ribbon 控件库后,就可以在程序中使用Ribbon 工具栏了。正式开发前我们先来看看Ribbon 工具栏的基本结构。下图为Office 2007 Ribbon 工具栏,其中主要分为Tab(Home、Insert 等),Group(Clipboard、Font、Paragraph 等)、Application ButtonQuick Access Toolbar 四大部分。本篇将介绍快捷工具栏(Quick Access Toolbar)相关的开发内容。

快捷工具栏开发

在本系列的演示将完成一个具有Ribbon 工具栏的Notepad 程序。将RibbonControlsLibrary.dll 加入项目,在XAML 中添加Ribbon 控件的命名空间。另,在Ribbon 库中提供了<RibbonWindow>供大家使用,可以将原来的<Window> 标签替换之。

<r:RibbonWindow x:Class="WPF4RibbonDemo.MainWindow"          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"          xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"          Height="360" Width="500">      ... ...  </r:RibbonWindow>  

接下在快捷工具栏位置添加三个按键,分别实现以下功能:“保存文档”、“清空文档”和“帮助”。其实Ribbon 本身就是一个Command 工具栏,我们可以在<RibbonWindow.Resources>中为三个按键定义好相应的<RibbonCommand>内容。

在下面代码中CanExecute 用于判断是否执行Command,Executed 用于执行Command 的相关事件。SmallImageSource、LargeImageSource 用于设置工具栏大小图标,便于在窗口大小调整时随之变化。

<r:RibbonWindow.Resources>      <r:RibbonCommand x:Key="SaveCommand" LabelTitle="Save"                       CanExecute="SaveCommand_CanExecute"                       Executed="SaveCommand_Executed"                       SmallImageSource="Images/Save.png"                       LargeImageSource="Images/Save.png"                       ToolTipTitle="Save" ToolTipDescription="Save document" />      <r:RibbonCommand x:Key="ClearCommand" LabelTitle="Clear"                       CanExecute="ClearCommand_CanExecute"                       Executed="ClearCommand_Executed"                       SmallImageSource="Images/Clear.png"                       LargeImageSource="Images/Clear.png"                        ToolTipTitle="Clear" ToolTipDescription="Clear all texts" />      <r:RibbonCommand x:Key="HelpCommand" LabelTitle="Help"                       CanExecute="HelpCommand_CanExecute"                       Executed="HelpCommand_Executed"                       SmallImageSource="Images/Help.png"                       LargeImageSource="Images/Help.png"                        ToolTipTitle="Help" ToolTipDescription="Help Center" />  </r:RibbonWindow.Resources>

在<Ribbon> 中加入<RibbonQuickAccessToolBar>标签,添加三个<RibbonButton>按键,并将上面<RibbonCommand>的Key 值添加到<RibbonButton> 的Command 属性中。FocusManger.IsFocusScope 可使Command 事件在TextBox 中生效(将在后续标签工具栏文章中提到)。

<DockPanel>      <r:Ribbon DockPanel.Dock="Top" FocusManager.IsFocusScope="True" Title="WPF4 Notepad">          <r:Ribbon.QuickAccessToolBar>              <r:RibbonQuickAccessToolBar>                  <r:RibbonButton r:RibbonQuickAccessToolBar.Placement="InCustomizeMenuAndToolBar"                                  Command="{StaticResource SaveCommand}" />                  <r:RibbonButton r:RibbonQuickAccessToolBar.Placement="InCustomizeMenuAndToolBar"                                  Command="{StaticResource ClearCommand}" />                  <r:RibbonButton r:RibbonQuickAccessToolBar.Placement="InCustomizeMenuAndToolBar"                                  Command="{StaticResource HelpCommand}" />              </r:RibbonQuickAccessToolBar>          </r:Ribbon.QuickAccessToolBar>    </r:Ribbon>  </DockPanel>  

上面程序中RibbonQuickAccessToolBar.Placement 用于设置快捷工具栏是否允许用户自定义调节。如下图所示可以将Help 按键从快捷工具栏中取消显示。若不设置该值则默认为不能调整,即工具栏中按键内容是固定的。

最后,为所有RibbonCommand 事件添加C# 代码完成事件内容,其中文档保存对话框可以使用Windows API Code Pack 的CommonSaveFileDialog 类完成文档保存功能。

private void SaveCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)  {      e.CanExecute = true;  }    private void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e)  {      ShellContainer sc = KnownFolders.DocumentsLibrary as ShellContainer;      CommonSaveFileDialog csfd = new CommonSaveFileDialog();      csfd.InitialDirectoryShellContainer = sc;      csfd.DefaultExtension = ".txt";      csfd.Filters.Add(new CommonFileDialogFilter("Text Files", "*.txt"));      if (csfd.ShowDialog() == CommonFileDialogResult.OK)      {          File.WriteAllText(csfd.FileName, txtBox.Text);      }  }    private void ClearCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)  {      e.CanExecute = true;  }    private void ClearCommand_Executed(object sender, ExecutedRoutedEventArgs e)  {      txtBox.Text = null;  }    private void HelpCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)  {      e.CanExecute = true;  }    private void HelpCommand_Executed(object sender, ExecutedRoutedEventArgs e)  {      MessageBox.Show("You have clicked the help button.");  }

运行效果图:

至此,快捷工具栏的开发内容就讲到这里,下篇将介绍如何开发应用程序菜单(Application Menu),也就是上图左上角记事本图标中的内容。敬请关注… …

相关资料

1. Office UI Licensing Developer Center
http://msdn.microsoft.com/en-us/office/aa973809.aspx

2. Ribbons
http://msdn.microsoft.com/en-us/library/cc872782.aspx

3. WPF Ribbon Preview
http://www.codeplex.com/wikipage?ProjectName=wpf&title=WPF%20Ribbon%20Preview

4. WPF 4 (VS 2010 and .NET 4.0 Series)
http://weblogs.asp.net/scottgu/archive/2009/10/26/wpf-4-vs-2010-and-net-4-0-series.aspx

5. Ribbon Feature Walkthrough
http://windowsclient.net/wpf/wpf35/wpf-35sp1-ribbon-walkthrough.aspx?PageIndex=1

6. Introducing the Windows Ribbon Framework
http://msdn.microsoft.com/en-us/library/dd316910(VS.85).aspx

转载于:https://blog.51cto.com/186067/1280631

WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)相关推荐

  1. WPF 4 Ribbon 开发 之 标签工具栏(Tab Toolbar)

    本篇将开始介绍标签工具栏的开发内容,标签工具栏可以说是Ribbon 的核心部分,应用程序所有的功能特性都会集中在这里,一个强大的Ribbon 工具栏也是一款软件成功的关键.在开始前还是先来看看标签工具 ...

  2. WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)

    原文:WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu) 在上一篇中我们完成了快捷工具栏的开发,本篇将讲解应用程序菜单开发的相关内容.如下图所示,点击程序窗口左上角的 ...

  3. MFC Ribbon风格界面去掉左上的Quick Access Toolbar小三角

    就是去掉这玩意 方法: 在MainFrm.cpp下的onCreate函数下找到: m_wndRibbonBar.LoadFromResource(IDR_RIBBON); 然后在下面添加: CMFCR ...

  4. 一起谈.NET技术,WPF Ribbon 开发资料分享

    Ribbon 开发工具 WPF Ribbon New 目前微软发布的最新Ribbon 开发工具,上一篇已经做过介绍这里就不再多说了.支持WPF 3.5 SP1.WPF 4,全面兼容VS2010 和Bl ...

  5. wpf控件开发基础(1)

    从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...

  6. 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了

    中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 E ...

  7. IOS仿微信键盘快捷工具栏

    IOS仿微信键盘快捷工具栏 环境 ios15 .Xcode13.0 https://gitee.com/johnson__save_admin/test-amuse-view-controller-o ...

  8. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(https://blog.csdn.net/lzuacm/ar ...

  9. win10 通过xrdp远程连接到ubuntu后,显示顶端快捷工具栏,显示最小化后的应用

    问题描述: win10 通过xrdp远程连接到ubuntu后,屏幕顶端的快捷工具栏消失了,导致打开应用不方便,且打开的应用最小化后也不容易找到. 解决方法: 自己一共找到了两种解决方法,其中推荐方法1 ...

最新文章

  1. Linux工具之curl与wget高级使用
  2. js中match、replace方法中使用正则表达式
  3. CTFshow php特性 web125
  4. String、StringBuilder和StringBuffer
  5. linux e盘路径,Linux添加路径到PATH环境变量
  6. java mysql连接两张表,如何使用Java和MySQL在一个语句中插入两个不同的表?
  7. 02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理
  8. 《MySQL实战45讲》实践篇 24-29 学习笔记 (主备篇)
  9. 澄清谣言!微盟创始人回应员工删库:涉事者深陷网贷,有过轻生
  10. 手机充电器5V=1A和5V=2A的区别是什么?能通用吗?
  11. 计算机考研评分标准,考研的评分标准.doc
  12. [转载] 由swap引出的java中参数严格值传递问题
  13. 流媒体协议地址获取 rtmp
  14. micropython logging文档
  15. 【GitHub】README.md文件中 markdown语法 插入超链接
  16. 聊一聊物联网嵌入式芯片的内容结构
  17. 打开组策略 计算机配置,组策略命令,小编告诉你电脑组策略怎么打开
  18. 装配作业指导书是什么?装配作业指导书主要包括哪些内容?
  19. 大局已定,应届生三面京东成功拿下20K的Offer。
  20. AIDL使用以及原理分析

热门文章

  1. linux设备驱动归纳总结
  2. 如何在页面加载完成后再去做某事?什么方法可以判断当前页面加载已完成?...
  3. NuGet安装和使用
  4. log4j用于读取.xml文件的出现了错误,类加载器.getResource(user.xml).getPath()返回路径空格变成了%20...
  5. C#的多线程机制探索4
  6. MFC-5动态更新窗体菜单1
  7. Windows Server 2012 R2/2016/2019无法安装.NET Framework 3.5.1或语言包的解决方法
  8. Android 异常: failed to connect to localhost/127.0.0.1
  9. odoo开发笔记 -- 异常、错误、警告、提示、确认信息显示
  10. axios请求GBK页面中文乱码解决方法