Fluent Ribbon Control Suite 就不做介绍了,网上的例子比较多,类似Office2007及以后版本的图形界面(菜单栏)。官网地址:https://github.com/fluentribbon/Fluent.Ribbon,这里主要分享一下其中一个控件的用法。

  最终实现效果:

  A、类似Office的粘贴,可点击粘贴下面的小箭头图标,进行“选择性粘贴”等等;

  B、类似Office的边框工具条,可进行不同工具条的切换。 

   

  由于网上大部分介绍Fluent Ribbon的主要为各种界面层次的关系,具体的控件介绍较少。后来,官网上下了相关例子,学习了下。实现A的效果直接用自带的控件SplitButton即可;而实现B的效果,一直没找到合适的。其实在SplitButton基础上稍微进行扩展即可。

  SplitButton顾名思义就是分割按钮,我理解为“按钮+其子按钮”。本身是个父控件,可以包含子(MenuItem)。下面分两块介绍A和B的实现,重点是B。

一、A效果的实现

  直接贴官方的例子代码:SplitButton和MenuItem都有Click事件,这里不再一一说明。 

WPF界面代码:

 <Fluent:SplitButton Name="buttonRed" Header="Red" Icon="Images\Red.png" LargeIcon="Images\RedLarge.png" SizeDefinition="Large" Click="buttonRed_Click_1">
<Fluent:MenuItem Header="Pink" Icon="Images\Pink.png"> </Fluent:MenuItem>
<Fluent:MenuItem Header="Orange" Icon="Images\Orange.png" ToolTip="Regular Tooltip" />
</Fluent:SplitButton>

二、B效果的实现

  由于在实际运用中,我参与的项目直接采用配置文件配置功能菜单,所以相关代码写在框架中了。这里又单独抽离出来,进行了控件的扩展,相关代码入下:

C# 扩展控件代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Fluent; namespace Fluent.Sample.Control
{
/// <summary>
/// 分割按钮--扩展
/// 效果:实现不同工具条的切换
/// </summary>
public class SplitButtonEx : SplitButton
{
private object m_SelectedObject = null;//选择的对象 /// <summary>
/// 构造
/// </summary>
public SplitButtonEx()
{
SelectedIndex = ;//默认为第一个
m_SelectedObject = null;
this.Click -= new System.Windows.RoutedEventHandler(SplitButtonEx_Click);
this.Click += new System.Windows.RoutedEventHandler(SplitButtonEx_Click);
} /// <summary>
/// 初始化时选择的子索引
/// </summary>
public int SelectedIndex
{
set;
get;
} /// <summary>
/// 重载初始化完成
/// </summary>
public override void EndInit()
{
base.EndInit(); if ( == this.Items.Count) return; //设置当前未选中的子
if (SelectedIndex > - && this.Items.Count > SelectedIndex)
{
MenuItemEx item = this.Items[SelectedIndex] as MenuItemEx;
SetObject(item);
}
} /// <summary>
/// 设置对象
/// </summary>
/// <param name="item"></param>
public void SetObject(MenuItemEx item)
{
if (null != item.ToolTip)
this.ToolTip = item.ToolTip.ToString();
if (null != item.Header)
this.Header = item.Header.ToString();
if (null != item.Icon)
{
this.LargeIcon = item.Icon.ToString();
this.Icon = item.Icon.ToString();
}
m_SelectedObject = item;
} /// <summary>
/// 单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void SplitButtonEx_Click(object sender, System.Windows.RoutedEventArgs e)
{
if ( == this.Items.Count) return;
if (null == m_SelectedObject) return; (m_SelectedObject as MenuItemEx).TriggerClickEvent();
}
} /// <summary>
/// MenuItem--扩展
/// 用途:用于支持分割按钮的扩展
/// </summary>
public class MenuItemEx : MenuItem
{
/// <summary>
/// 构造
/// </summary>
public MenuItemEx()
{ } /// <summary>
/// 触发Click事件
/// </summary>
public void TriggerClickEvent()
{
base.OnClick();
} /// <summary>
/// 单击事件
/// </summary>
protected override void OnClick()
{
base.OnClick();
if (null != Parent && Parent is SplitButtonEx)//修改父
{
(Parent as SplitButtonEx).SetObject(this);
}
}
}
}

WPF界面代码:

<My:SplitButtonEx x:Name="buttonRed" SelectedIndex="1" Header="Red" Icon="Images\Red.png" LargeIcon="Images\RedLarge.png" SizeDefinition="Large">
<My:MenuItemEx Header="Pink" Icon="Images\Pink.png" Click="MenuItemEx_Click">
</My:MenuItemEx>
<My:MenuItemEx Header="Orange" Icon="Images\Orange.png" ToolTip="Regular Tooltip" Click="MenuItemEx_Click_1"/>
</My:SplitButtonEx>

 备注:最后再提一点,SplitButton有个属性"SizeDefinition",这个比较有用,不过该属性值不是枚举类型,而是字符串类型。可以为”Large、Middle、Small"三个中的任一个,为Small时和上面的效果B差不多,即不带任何文字,只有图标。Word中的“粘贴”,设置的是“Large"。

浅谈Fluent Ribbon 中的SplitButton的更多相关文章

  1. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  2. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  3. 转载 浅谈C/C++中的static和extern关键字

    浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T   static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...

  4. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  5. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

  6. 浅谈关于QT中Webkit内核浏览器

    关于QT中Webkit内核浏览器是本文要介绍的内容,主要是来学习QT中webkit中浏览器的使用.提起WebKit,大家自然而然地想到浏览器.作为浏览器内部的主要构件,WebKit的主要工作是渲染.给 ...

  7. 浅谈JAVA GUI中,AWT与Swing的区别、联系及优缺点

    浅谈JAVA GUI中,AWT与Swing的区别.联系及优缺点 A.区别 1.发布的时间 AWT是在JDK 1.0版本时提出的 Swing是在AWT之后提出的(JAVA 2) 2. ”重量” AWT是 ...

  8. 浅谈 Swift 2 中的 Objective-C 指针

    浅谈 Swift 2 中的 Objective-C 指针 2015-09-07  499 文章目录 1. 在 Swift 中读 C 指针 2. 在 Swift 中创建 C 指针 3. 总结 作者:Ja ...

  9. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

随机推荐

  1. LeetCode刷题第一天

    1 . 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用 ...

  2. lvarchar类型对表结构变更影响

    informix中lvarchar类型设计用于存储中度长度的字符数据(短的常用varchar类型.特别长的字符可用text类型).其默认长度2048byte,最大长度32739byte,是一种可变长度 ...

  3. JS求一个数组元素的最小公倍数

    求几个数的最小公倍数就是先求出前两个数的最小公倍数,然后再把这个最小公倍数跟第三个数放在一起来求最小公倍数,如此类推... var dbList = []; //两个数的最小公倍数 function ...

  4. 【javascript】javascript设计模式mixin模式

    概述: Mixin是JavaScript中用的最普遍的模式,几乎所有流行类库都会有Mixin的实现.任意一个对象的全部或部分属性拷贝到另一个对象上. 一 .混合对象 二 .混合类

  5. 本地调试 谷歌浏览器报错:跨域问题处理 Access-Control-Allow-Origin

    前端在本地,调试,就经常的就是会遇到 调用接口,提示跨域了. 如你要访问 http://****/api/user chrome 浏览器 报错: XMLHttpRequest cannot load ...

  6. LintCode2016年8月8日算法比赛----中序遍历和后序遍历构造二叉树

    中序遍历和后序遍历构造二叉树 题目描述 根据中序遍历和后序遍历构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下 ...

  7. How to block a specific IP Address using UFW

    How to block a specific IP Address using UFW The key to blocking a specific IP address with UFW is t ...

  8. win10命令控制符

    IP:ipconfigIP地址侦测器:Nslookup显卡:dxdiag控制面板:control电话拨号:dialer木马捆绑工具,系统自带:iexpress本地用户和组:lusrmgr.msc鼠标属 ...

  9. js只对等号左边的进行变量提升

    ### 只对等号左边的进行变量提升 > =:赋值,左边是变量,右边都应该是值 ```javascript //之前 i%2 === 0?item.className = 'c1':item.cl ...

  10. spring boot(7)-mybatis全注解化

    关于配置数据库可以参考上一篇文章,这里只讲mybatis pom.xml <!-- 引入mybatis --> <dependency> <groupId>org. ...