ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用VisualBrush定制复杂的按钮样式

用VisualBrush定制复杂的按钮样式

原创 Linux操作系统 作者:斯克迪亚 时间:2008-09-18 05:08:07 0 删除 编辑

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属性只是定义了简单的界限分明的渐变作为背景:

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

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

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

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

   

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

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

   

        Radius="55" />

   

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

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

来看看我们的最终效果:

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

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

10474909_200809180509181.jpg

10474909_200809180509182.jpg

10474909_200809180509183.gif

10474909_200809180509184.gif

10474909_200809180509185.gif

10474909_200809180509186.jpg

10474909_200809180509187.jpg

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10474909/viewspace-448805/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-08-14

  • 博文量
    40
  • 访问量
    669474