原文:Windows Phone开发(31):画刷

画刷是啥玩意儿?哈,其实画刷是用来涂鸦,真的,没骗你,至于你信不信,反正我信了。

本文通过价绍几个典型的画刷,使你明白画刷就是用来涂鸦的。

一、纯色画刷SolidColorBrush。

这个家伙比较“纯”,当然它不是装纯,的确很纯,纯到只用一种颜色,所以叫“单色画刷”。

来,看看这个示例,我们画一个矩形(放在一个Canvas中),然后用这个纯家伙来打扮一下。

        <Rectangle Canvas.Left="5" Canvas.Top="130" Width="85" Height="75">
<Rectangle.Fill>
<SolidColorBrush Color="White"/>
</Rectangle.Fill>
</Rectangle>

因为内置有转换器,微软一向是关心开发者的身体健康的,所以,MS不舍得我们写代码的时候过多劳累,所以,上面的内容可以简写为。

        <Rectangle Canvas.Left="110" Canvas.Top="156"
Width="120" Height="120" Fill="Blue"/>

这两段代码实现的效果是一样的,很明显,你会更喜欢后者,因为它简练了N多。

接下来我们看看Color属性有哪些表示方法。

1、名字,比如Blue,不用我翻译了,明白了;

2、RGB,如#CCCCCC,如果你干过网页设计,写过CSS样式,你懂的;

3、ARGB,如#0CBBBBBB,其实就是在前面加一个A值,0-1之间,透明度。

可以说,你记住了以上三点,你就可以写出数不尽的颜色。

二、渐变画刷。

如果你玩过像Photoshop这些绘图软件,或者你做过GDI编程,当然你玩过WPF更好,简直一模一样。

渐变颜色,我们可以通俗地理解为:由N多种颜色组成,这些颜色有各自的分布主式,并且,在各段颜色之间都有一个过渡。

下面看看两种渐变形式:线性和径向。

(一)线性渐变

先看看下面的图,相信没有什么文字可以比图片更直观,相信你一看就知道何为线性渐变,只可意会啊。

好,上面的效果是如何实现的呢?用到这个类LinearGradientBrush。看一看XAML代码。

        <Rectangle Canvas.Top="312" Canvas.Left="40" Width="278" Height="95">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Yellow" Offset="0"/>
<GradientStop Color="Green" Offset="0.5"/>
<GradientStop Color="Orange" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>

其中,我们要关注几个地方:

1、StartPoint,线性渐变的起始点,既然是线性了,肯定有始有终的了,X和Y都在0和1之间;

2、EndPoint,结束点,同样,值范围在0-1之间,包含0和1.

3、0,0点在左上角,1,1点在右下角。

每个LinearGradientBrush都可以包含N个GradientStop,表示每种颜色的终点位置,如下图所示。

如果你还不是很理解,最好的法子就是多练习。

        <Ellipse Canvas.Top="465" Canvas.Left="40" Width="150" Height="120">
<Ellipse.Fill>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#FF8E8EE8" />
<GradientStop Color="#FFDBBC55" Offset="0.6" />
<GradientStop Color="#FF61DDF5" Offset="0.99" />
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>

以上两个例子的运行效果如下图所示。

(二)径向渐变

名字不好理解,还是看图写作文吧。



怎么样,美吗?看看实现的XAML代码吧。

        <Rectangle Canvas.Left="242" Canvas.Top="465" Width="150" Height="150">
<Rectangle.Fill>
<RadialGradientBrush Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
<GradientStop Color="Green" Offset="0.2"/>
<GradientStop Color="LightBlue" Offset="0.7"/>
<GradientStop Color="Yellow" Offset="1"/>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>

看看,有几个属性比刺眼。

1、Center,中心点,你看到了,径向渐变很像一个圆,有中心点,有半径,同样,取值范围是[0,1]。

2、RadiusX和RadiusY,同理,范围在[0,1],横轴和纵轴上的半径。

可以发现这些值都是相对的逻辑值,这样使用比绝对位置更灵活。

三、视频画刷VideoBrush。

这个要配合MediaElement一起使用,在前面的文章中已经介绍过。

四、图象画刷ImageBrush。

如果你觉得前面的都是用颜色的,不够爽,不妨看看这个,用图片来填充。

实现的XAML如下。

        <Ellipse Canvas.Left="40" Canvas.Top="445" Width="398" Height="248">
<Ellipse.Fill>
<ImageBrush ImageSource="test.jpg"/>
</Ellipse.Fill>
</Ellipse>

这个就简单了,ImageSource属性就是指向一张图片,使用方法与Image控件类似。

Windows Phone开发(31):画刷的更多相关文章

  1. wpf 画刷的分类

    System.Windows.Media.Brush最上一层画刷 System.Windows.Media.GradientBrush  线性画刷 ,下层主要有两种画刷 System.Windows. ...

  2. 学习windows编程 day4 之 设置画刷

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  3. Windows Phone开发人员必看资料

    win phone开发必看资料,下载地址收藏啦!收藏后可有选择性的下载,希望大家喜欢! 完整附件下载:http://down.51cto.com/data/414417 附件预览: Windows E ...

  4. Windows Phone开发(37):动画之ColorAnimation

    原文:Windows Phone开发(37):动画之ColorAnimation 上一节中我们讨论了用double值进行动画处理,我们知道动画是有很多种的,今天,我向大家继续介绍一个动画类--Colo ...

  5. Windows Phone开发(29):隔离存储C

    原文:Windows Phone开发(29):隔离存储C 本文是隔离存储的第三节,大家先喝杯咖啡放松,今天的内容也是非常简单,我们就聊一件东东--用户设置. 当然了,可能翻译为应用程序设置合适一些,不 ...

  6. Windows Phone开发(30):图形

    原文:Windows Phone开发(30):图形 图形如矩形.椭圆.路径等都从Shape类派生,它们一般表示规则或不规则图形,这些图形都是简单的二维图形,我相信大家都能理解的. 例一:矩形. 请看下 ...

  7. Windows Phone开发(20):当MediaElement和VideoBrush合作的时候

    原文:Windows Phone开发(20):当MediaElement和VideoBrush合作的时候 前面说的那么多控件都是"静态"的,都是"哑吧"的,今天 ...

  8. WPF 10天修炼 第八天 - 形状、画刷和变换

    图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...

  9. MFC Windows程序开发究竟是什么?

    MFC Windows程序开发究竟是什么? MFC是一个Application Framework.他是一个完整的程序模型. 什么是MFC?MFC是微软公司出品一个Application Framew ...

随机推荐

  1. HTML5开发桌面应用:选择node-webkit还是有道heX

    近几年,移动应用和web2.0大行其道,相比之下.传统桌面应用程序开发显得相对冷清(包含该领域技术人才的后继力量),但在一些场景下,它依旧有其不可替代的优势. 将HTML5和Node.JS的技术优势. ...

  2. Swift - whose view is not in the window hierarchy 问题解决方法

    问题现象:想在页面初始化的时候,使用self.presentViewController方法弹出个告警提示框UIAlertController.但行后报了个如下告警,同时告警框也出不来. 1 2015 ...

  3. 积累的VC编程小技巧之标题栏和菜单

    1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?   ...

  4. Nginx和Tomcat负载均衡实现session共享(转)

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  5. 使用CUNIT测试

    使用CUNIT测试 一:概述 CUnit是一个c语言的单元测试框架,它是以静态链接库的形式,连接到用户代码中的,主要的功能就是提供了语义丰富的断言和多种测试结果输出接口,可以方便地生成测试报告. 但是 ...

  6. Swift - 开关按钮(UISwitch)的用法

    下面演示如何创建开关,以及监听它值的改变,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class ViewController: UIV ...

  7. C++开源代码项目汇总

    Google的C++开源代码项目 v8  -  V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎.V8 采用 C++ 编写,可在谷歌浏览器(来自 Go ...

  8. How to append files to a .tar archive using Apache Commons Compress?(转)

    I created a copy of the tar archive and copied to entire content to it. Then I delete the old tar ar ...

  9. 14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量

    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量 InnoDB 使用bac ...

  10. 随机IP代理

    第一个例子就设置了一个代理IP,也是不靠谱的,最好的方式就是多设置几个,如第二个例子,通过http://www.youdaili.net/Daili/你可以找到很多代理IP, 抓取国内网站时尽量选取中 ...