原文:WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)

     在上一篇中我们完成了快捷工具栏的开发,本篇将讲解应用程序菜单开发的相关内容。如下图所示,点击程序窗口左上角的记事本图标(Application Button)会显示出应用程序菜单(Application Menu)列表,列表中的按键即为软件的一些基本功能。

RibbonCommand

以“Open”按键为例,首先仍然需要在<RibbonWindow.Resources>中定义其<RibbonCommand>内容。

<r:RibbonCommand x:Key="OpenCommand" LabelTitle="Open"
CanExecute="OpenCommand_CanExecute"
Executed="OpenCommand_Executed"
SmallImageSource="Images/Open.png"
LargeImageSource="Images/Open.png"
ToolTipTitle="Open"
ToolTipDescription="Open document" />

为<RibbonCommand>添加Command 事件实现打开文档功能:

private void OpenCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
} private void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
ShellContainer sc = KnownFolders.DocumentsLibrary as ShellContainer;
CommonOpenFileDialog cofd = new CommonOpenFileDialog();
cofd.InitialDirectoryShellContainer = sc;
cofd.DefaultExtension = ".txt";
cofd.Filters.Add(new CommonFileDialogFilter("Text Files", "*.txt"));
if (cofd.ShowDialog() == CommonFileDialogResult.OK)
{
txtBox.Text = File.ReadAllText(cofd.FileName, Encoding.Default);
}
}

ApplicationMenu

     <RibbonCommand>完成后继续在<Ribbon>中添加<RibbonApplicationMenu>用于设置菜单列表中的内容。其中<RibbonApplicationMenuItem>即为菜单按键,将相应的<RibbonCommand>添加到Command 属性中。另,按键之间可用<Separator>作为分隔。

<r:Ribbon DockPanel.Dock="Top" FocusManager.IsFocusScope="True" Title="WPF4 Notepad">
<r:Ribbon.ApplicationMenu>
<r:RibbonApplicationMenu Command="{StaticResource AppMenuCommand}">
<r:RibbonApplicationMenuItem Command="{StaticResource OpenCommand}" />
<r:RibbonApplicationMenuItem Command="{StaticResource SaveCommand}" />
<Separator/>
<r:RibbonApplicationSplitMenuItem Command="{StaticResource SendAsCommand}">
<r:RibbonApplicationMenuItem Command="{StaticResource MailCommand}" />
<r:RibbonApplicationMenuItem Command="{StaticResource TwitterCommand}" />
</r:RibbonApplicationSplitMenuItem>
<Separator/>
<r:RibbonApplicationMenuItem Command="{StaticResource CloseCommand}" />
</r:RibbonApplicationMenu>
</r:Ribbon.ApplicationMenu>
</r:Ribbon>

     上面代码中对于存在子菜单的按键(例如,SendAs 按键)可用<RibbonApplicationSplitMenuItem>对其进行扩展。子菜单标题内容可通过<RibbonCommand>的LabelDescription 属性进行设置(如下代码)。

<r:RibbonCommand x:Key="SendAsCommand" LabelTitle="SendAs"
LabelDescription="Send this text to the World"
CanExecute="SendAsCommand_CanExecute"
SmallImageSource="Images/SendAs.png"
LargeImageSource="Images/SendAs.png"
ToolTipTitle="SendAs"
ToolTipDescription="Send this text to the World" />

ApplicationButton

     最后来完成应用程序菜单图标(记事本图标)的开发。当然也需要通过<RibbonCommand>进行设置,与之前不同之处在于不用添加CanExecute 和Executed 内容。

<r:RibbonCommand x:Key="AppMenuCommand" LabelTitle="Application Button"
SmallImageSource="Images/Notepad.png"
LargeImageSource="Images/Notepad.png"
ToolTipTitle="WPF4 Notepad"
ToolTipDescription="Notepad Application with Ribbon Sample" />

     将<RibbonCommand>加入<RibbonApplicationMenu> Command 属性后默认情况呈现下图样式,图标的形状并不与Office 2007 一样为圆形。

     如果想要圆形效果其实也很简单,Ribbon 控件库为我们提供了三种样式模板:Office2007Black、Office2007Blue、Office2007Silver,只需在MainWindow() 中加入一行代码即可实现圆形效果和不同的Ribbon 样式。

public MainWindow()
{
InitializeComponent();
this.Resources.MergedDictionaries.Add(PopularApplicationSkins.Office2007Black);
}

     本篇关于应用程序菜单的开发就介绍到这里,下篇将正式进行标签工具栏(Tab Toolbar)的开发内容。同时本示例源代码也将一同公布。敬请关注… …

WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)的更多相关文章

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

    原文:WPF 4 Ribbon 开发 之 标签工具栏(Tab Toolbar)      本篇将开始介绍标签工具栏的开发内容,标签工具栏可以说是Ribbon 的核心部分,应用程序所有的功能特性都会集中 ...

  2. WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)

    转自 http://www.cnblogs.com/gnielee/archive/2010/05/10/wpf4-ribbon-quick-access-toolbar.html 在Office 2 ...

  3. VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

  4. VS2010-MFC(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    转自:http://www.jizhuomi.com/software/251.html 上一节讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始将为大家带来Ribbon界面 ...

  5. WPF与WinForm开发有什么区别?

    转自http://hi.baidu.com/leoliu83/blog/item/1d1a4a66dcb41134aa184cfd.html WPF开发于WinForm之后,从技术发展的角度,WPF比 ...

  6. 浅谈Excel开发:二 Excel 菜单系统

    在开始Excel开发之前,需要把架子搭起来.最直接的那就是Excel里面的菜单了,他向用户直观的展现了我们的插件具有哪些功能.菜单出来之后我们就可以实现里面的事件和功能了.Excel菜单有两种形式,一 ...

  7. VSTO 学习笔记(十)Office 2010 Ribbon开发

    原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...

  8. WPF简介:VS创建桌面应用程序

    1.简介 1/ 什么是WPF WPF,Windows Presentation Foundation也,译过来就是"Windows呈现基础",你看它的目的非常明确,就是用来把数据& ...

  9. UwpDesktop!WPF也能开发Surface Dial

    原文:UwpDesktop!WPF也能开发Surface Dial 前段时间巨硬发布了一款新的输入设备Surface Dial,配合Surface Studio使用简直炫酷到没朋友. 本人由于公司业务 ...

随机推荐

  1. 一个自己主动依据xcode中的objective-c代码生成类关系图的神器

    https://github.com/kimsungwhee/KSHObjcUML 安装方法: 1.下载项目 2.执行 3.会又一次开启一个新的xcode 4.选择一个项目,点击 Objc-UML 会 ...

  2. jquery-12 jquery常用动画效果有哪些

    jquery-12 jquery常用动画效果有哪些 一.总结 一句话总结:jquery可以用户animate()自定义动画,也可以slide和fade系列方法来设置动画. 1.动画效果如何设置执行时间 ...

  3. SpringCloud微服务框架搭建

    一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...

  4. [Angular Directive] 2. Add Inputs to Angular 2 Directives

    The @Input decorator allows you to pass values into your @Directive so that you can change the value ...

  5. Hdu4771(杭州赛区)

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  6. 浏览器对象模型(BOM)是什么?(体系结构+知识详解)(图片:结构)

    浏览器对象模型(BOM)是什么?(体系结构+知识详解)(图片:结构) 一.总结 1.BOM操作所有和浏览器相关的东西:网页文档dom,历史记录,浏览器屏幕,浏览器信息,文档的地址url,页面的框架集. ...

  7. 强大的 function adapters

    void printElem(int elem, const char* prefix){ cout << prefix << elem << endl; } fo ...

  8. 【u225】最优分解方案

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 经过第一轮的游戏,不少同学将会获得圣诞特别礼物,但这时细心的数学课代表发现了一个问题: 留下来的人太多 ...

  9. js进阶 9-7 自动计算商品价值

    js进阶 9-7  自动计算商品价值 一.总结 一句话总结: 1.form表单控件value属性:属性可取值可赋值 2.文本onchange事件 3.form及form中控件通过name访问元素 二. ...

  10. 赵雅智_service电话监听2加接通电话录音

    步骤: 创建CallStateService继承Service 取得电话服务 监听电话动作 电话监听的对象 没有电话时 停止刻录 重设 刻录完毕一定要释放资源 电话响铃时 从麦克风採集声音 内容输出格 ...