VisualBrush是一种比较特殊的笔刷,它的功能仍然是用来给元素填充图案,但它的内容却可以是各种控件。

你可以将其理解为一个普通的容器,但在其内部的所有控件都会失去交互能力,而只保留显示能力。

你可以通过本例学习到关于VisualBrush的使用方法,以及复杂样式的定制技巧。

首先来看一下我们将要实现的效果的4倍放大图:

这个效果的特点如下:

文字部分有白色泛光效果,使之看起来就像是发光体。

按钮下半部分有椭圆形的放射渐变,但注意其上下并不对称。

接下来就开工制作,首先新建一个WPF应用程序,胡乱放上一些按钮用作测试:

在Window的资源中指定按钮的样式:

可以看到其基本结构非常简单,就是一个Border内装载着内容,而核心的样式其实都是在Border的Background属性里面定义的:

是的,在这里我们就是用到了VisualBrush,在他内部装载了一个拥有均分的两行的Grid,Grid的属性设置如下:

ClipToBounds="True" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"

VisualBrush的内部与其外部的布局毫不相干,所以如果不给Grid指定尺寸的话,它就会为0;而如果内部的显示比例不与外部统一的话,某些元素拉伸后也会比较难看。所以我将其尺寸绑定到了源控件的尺寸。

ClipToBounds属性用于指示是否剪裁溢出的元素,不剪裁的话有可能因溢出而增大元素占用尺寸,造成最终显示比例失调。

Grid的Backround属性只是定义了简单的界限分明的渐变作为背景:

<Grid.Background>

<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">

<GradientStop Color="#FF95BCB9" Offset="0" />

<GradientStop Color="#FF294B53" Offset="0.5" />

<GradientStop Color="#000" Offset="0.5" />

</LinearGradientBrush>

</Grid.Background>

在Grid内部有一个Ellipse元素和两个ContentPresenter元素,两个ContentPresenter在这里都使用了模糊滤镜,来营造泛光效果,Ellipse就是实现底部的放射渐变,其代码如下:

<Ellipse Opacity="0.8" Grid.Row="1" Fill="#51EDFF" Height="{TemplateBinding Height}">

<Ellipse.BitmapEffect>

<BlurBitmapEffect Radius="55" />

</Ellipse.BitmapEffect>

</Ellipse>

其原理就是通过绑定Height属性来与按钮等高,然后将其置于Grid的第二行中,这样它的下半部分就会溢出Grid的下边界,而按钮内就只显示出它的上半部,此时再对其进行较大程度的模糊,便与背景结合而形成放射渐变效果。

如果去除它的模糊滤镜,那么看到的效果就是这样的:

来看看我们的最终效果:

本文的PDF版本下载:http://www.box.net/shared/j117u4qcyx

源文件下载:http://www.box.net/shared/66e2tvbfph

用VisualBrush定制复杂的按钮样式相关推荐

  1. 使用RAD Studio 10 Seattle创建自定义按钮样式

    在RAD Studio 10 Seattle中,我们对IDE中的集成样式设计器进行了许多增强.在今天的帖子中,我想我将介绍使用RAD Studio 10 Seattle创建自己的自定义按钮样式的步骤. ...

  2. css设置按钮样式_使用CSS设置按钮样式的快速指南

    css设置按钮样式 by Ashwini Sheshagiri 通过Ashwini Sheshagiri Buttons have become an inevitable part of front ...

  3. silverlight 关于按钮样式

    概述 请想象这样一个场景,小型企业通过自己的站点可以让更多的顾客了解到您的产品.在许多商业领域,公司都会有自己的站点来宣传自己.现在,越来越多的 商业客户希望将自己的站点升级到Web 2.0,其中,许 ...

  4. CSS按钮样式,带代码传送门

    1. Plastic Buttons 这组按钮相当的简洁.干净.由于它们拥有不同的颜色.尺寸以及风格,并提供了小.中.大号按钮供你任意挑选.所以,你可以轻松地重新调整或更换它们.而利用纯 CSS 的实 ...

  5. Android Material Design按钮样式

    本文翻译自:Android Material Design Button Styles I'm confused on button styles for material design. 我对材质设 ...

  6. 8、Semantic-UI之其他按钮样式

    8.1 其他按钮样式定义 示例:定义其他按钮样式 定义圆形图标按钮样式 <div class="ui circular icon button"><i class ...

  7. html向左箭头样式,详解Bootstrap的纯CSS3箭头按钮样式

    简要教程 这是一款基于Bootstrap的纯CSS3箭头按钮样式.该按钮通过修改原生Bootstrap的按钮样式,来生成指向左侧或右侧的箭头按钮. [相关视频推荐:Bootstrap教程] 安装 可以 ...

  8. 【若依(ruoyi)】按钮样式

    前言 若依(ruoyi): v4.3 按钮样式文件 static/css/style.css 按钮样式 .btn-default .btn-primary .btn-info .btn-success ...

  9. 怎么修改谷歌浏览器文件提交按钮样式_使用css自定义input file浏览按钮样式

    前言 文件上传用途非常广泛,浏览器自带文件控件不太美观,很多时候不能满足需求,需要自定义input [type=file]的样式. 不同浏览器的file控件表现形式不一样 火狐 谷歌 IE 不同浏览器 ...

最新文章

  1. python numpy 数据类型为python对象-python numPy模块 与numpy里的数据类型、数据类型对象dtype...
  2. NIS服务器介绍及搭建
  3. js get/set Cookie
  4. ES6-2 块级作用域与嵌套、let、暂行性死区
  5. 分析数据库CitusDB:提供弹性计算能力
  6. python 绘图的背景颜色不要_matplotlib自定义添加 “哆啦A梦”背景图,这个操作真牛逼!...
  7. vscode 开发vue必备插件_vsCode开发vue项目必备插件
  8. 爬取上千个年度基金后,才知道这有多坑,千万别被人当韭菜给割了
  9. Java简单ztree树
  10. JDK 安装 Java环境变量配置
  11. 关于开发板不断eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 eth0: link down的问题
  12. 【零基础学Python】Day9 Python推导式
  13. python大众点评霸王餐_如何抽中大众点评霸王餐?
  14. 卡内基梅隆计算机硕士录取案例,大神offer | 恭喜再来人学员录取卡耐基梅隆大学-机器学习硕士!...
  15. Footprint Analytics: 从多个维度带你进入 GameFi 领域
  16. 通过bitmap改变图片的大小
  17. 项目:家庭收入支出记账软件(JAVA语言)
  18. 学习win32汇编指令:lea和offset
  19. 三基色PWM调光方法
  20. R语言实战-第八章 R in action-chapter8

热门文章

  1. jfinal项目tomcat下部署
  2. 读取和写入Windows的INI文件
  3. 在VB中INI文件的读写、删除(对中文支持很好)
  4. SpringBoot实战(六):Redis Pipeline 轻松实现百倍性能提升
  5. SpringBoot实战(五):配置健康检查与监控
  6. 自动给神经网络找bug,Google发布TensorFuzz
  7. 探索新型化学反应的AI机器人诞生!有望加速药物发现 | Nature论文
  8. 小米距告别破发还差2分钱
  9. 2018年,AI会在金融行业哪些方向上发力?
  10. 两日公开课:伯克利深度强化学习训练营 | 视频+PPT