WPF样式之画刷结合样式

第一种画刷,渐变画刷GradientBrush

(拿线性渐变画刷LinearGradientBrush(其实它涵盖在GradientBrush画刷内。现在拿他来说事。),还有一个圆心渐变画刷RadialgradientBrush,两者用法相同):

我想象中的button的总体样式大体结构应该如下:

<Style TargetType="Button">

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="Button">

<Border x:Name="border">

<ContentPresenter/>

</Border>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

那么看看这样的button到底是什么样子:

<Button Height="50" Width="150" Content="Button"/>

窗体的背景是灰色,button显示如下:

可见,现在button的样式是只显示出里面content的内容,之前的那些特效全部消失。那么就看我们能不能给button样式补充画刷,让他慢慢的改变形状。

其中,border的background引用的是如下的一个画刷:

这个画刷应该算是最简单的一个了,从上到下,用白色渐变到稍微有点的灰色。看看button的现在呈现,结果出现异常:

看起来,似乎是由于静态引用导致的,现在将其改为动态的,修改样式background为:

Background="{DynamicResource NormalBrush}"

运行通过,button表现如下:

虽然button表达出来了我们定义的画刷,看起来,也似乎是像点样子了,但是button的content竟然在左上角,ok修改样式展现层代码如下:

<ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>

看到最后这个RecognizesAccessKey属性,我查了下msdn,上面是这样说的,获取或设置一个值 ContentPresenter 是否处于其样式应当使用 AccessText 。事实上,说实话,我也没怎么看懂。后来看了AccessText才知道,是对应用下划线起作用的,大概说明如下:

如果内容有多个下划线字符,因此,只有第一个转换为 AccessKey;其他下划线显示为常规文本。 如果要转换为访问键的下划线不是第一个下划线,对于前面一个要转换的所有下划线请使用两个连续的下划线。 例如,下面的代码包含一个访问键和显示作为的 _HelloWorld:

上面也是msdn的内容。

这次button的content显示已经变得正常了,显示在了中央:

好的,接下来,我们还要对这个button应用一些其他的画刷,首先,我们内容是被一个border包围的,那么我们就看看这个border的borderbrush。更改style,添加一个borderbrush,在border的属性里面加如下一句:

BorderBrush="Red",显现出来的效果如下:

Soga,看到这,就明白这borderbrush是干什么的了,下面定义一个borderbrush如下:

这依旧是个线性画刷,从上到下,由浅灰色过渡到浅黑色,引用:BorderBrush="{DynamicResource NormalBorderBrush}"

看效果吧:

看了上面,说一下线性画刷:

其中线性画刷有两个必要的属性:

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

分别表示开始画的点,和结束画的点,左上角的点为0,0,右下角的点为1,1.两个点的连线表示画刷画的方向。

如果上面的button从0,0画到0,1,表示依靠Y轴从上到下画线。

下面说说GradientStop的Offset属性,这表示画刷画线方向的偏移。上面画button我们只从上到下,渐变颜色。如果我们渐变的颜色不一样,就可以有好几个offset:例如修改代码如下:

则button的表现如下(从浅白画一半到红,然后再从红画到浅黑。):

这样一来,我们也就大概了解了这第一种画刷的用法。

注意(MSDN):如果想要从水平渐变,则可以设置如下:若要创建水平线性渐变,请将 LinearGradientBrush 的 StartPoint 和 EndPoint 分别改为 (0,0.5) 和 (1,0.5)。

如果想要从垂直渐变:若要创建垂直线性渐变,请将 LinearGradientBrush 的 StartPoint 和 EndPoint 分别改为 (0.5,0) 和 (0.5,1)。

第二种画刷,实心画刷,也叫固体画刷。SolidColorBrush

这第二种画刷应该来说比较简单,直接上代码:

<SolidColorBrush x:Key="DisabledForegroundBrush" Color="Red" />

在上面的button里面用,改写button的Style如下:

button的表现如下:

可见,前景色发生了变化。这大概就是实心画刷的用法了。

第三种画刷,就是所说的TileBrush了

不过,我们只拿ImageBrush来说事。(除此之外,还有Drawing画刷和VisualBrush)

在上述style的基础上增加代码:

<ImageBrush x:Key="ButtonImageBrush" ImageSource="btnImage.png"/>

在Style里面引用:

button的表现,如下:

至此,画刷的一些简单的用法也就说完了。都是一些简单的引用。下面贴出来一线码农大神的画刷结构图:

如果想要知道更多关于画刷的知识,一线码农也可以帮助到您,一线文章索引:http://www.cnblogs.com/huangxincheng/archive/2012/07/14/2591941.html

时间: 2024-10-06 06:07:16

WPF样式之画刷结合样式的相关文章

WPF中线性渐变画刷的一个小窍门

最近被项目里面控件的设计搞的死去活来的,大部分的设计都会需要使用进度条的功能,因为UI形状的变态,使用ProgressBar不能满足需求,没办法就自己想办法实现进度显示.折腾的多了发现一个很不错的方法来实现进度显示的问题.不需要进行复杂的计算,具体就是借用线性渐变画刷. 线性渐变画刷在使用的时候设置里面的Offset的时候,你会发现它用的是相对值,也就是0-1.换句话说,不管你的填充到底多长,反正就是通过百分比来显示你的高度,只要你将代码写成这个模样 然后你会看到效果是这个模样的: 已经成功了一

深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例

原文:深入WPF中的图像画刷(ImageBrush)之1--ImageBrush使用举例 昨天我在<简述WPF中的画刷(Brush)??>中简要介绍了WPF中的画刷的使用.现在接着深入研究一下其中的ImageBrush. 如上文所述,ImageBrush是一种TileBrush,它使用ImageSource属性来定义图像作为画刷的绘制内容.你可以控制图像的缩放.对齐.铺设方式.ImageBrush可用于绘制形状.控件,文本等. 下面看看它的一些简单应用:首先看一下效果图片:先看看上图的左边部分

WPF之设置多控件样式

需求是这样的,系统要监测风,雨,雪多个自然灾害.在界面上有这些灾害突发的报警框.本来报警框的背景是由于级别不同显示不同的颜色,但是现在发现,当报警背景为蓝色是,黑色字体 看不出来.又由于技术文档上规定背景颜色了,所以现在只能改变所有lbl的字体.而这些控件都是WPF自定义控件的一些 元素. 要实现这个功能,有很多种方式.WPF的好处 就是既可以像Html+CSS 去设置, 也可以像Winform一样去更改.重点说一下解决方式. 这个功能要调用的有大概10多处,每个窗体有6个左右lbl,所以每次给

WPF自定义控件与样式(3)-TextBox &amp; RichTextBox &amp; PasswordBox样式、水印、Label标签、功能扩展

原文:WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式.水印.Label标签.功能扩展 一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文本框TextBox控件样式及扩展功能,实现了样式.水印.Label标签.功能扩展: 富

Wpf 画刷

画刷类 1.SolidColorBrush 使用单一的连续颜色绘制区域. 2.LinearGradientBrush 使用简便填充绘制区域,渐变的阴影填充从一种颜色变化到另一种颜色. 3.RadialGradientBrush 使用径向简便填充绘制区域,除了是在圆形模式中从中心点向外部辐射渐变之外,这种画刷和线性检变化刷类似. 4.ImageBrush 使用可以被拉伸.缩放或平铺的图像绘制区域. 5.DrawingBrush 使用一个Drawing对象绘制区域.该对象可以包含已经定义的形状和位图

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

图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System.Windows.Shapes.Shape类是一个抽象类,从该类又派生出多个不同的子类,如下图: Shape类的通用属性 属性名称 描述 Fill 绘制填充的画刷 Stroke 绘制边框的画刷 StrokeThickness 与设备无关的边框宽度 StrokeStartLineCap和StrokeEn

wpf 中DataGrid 控件的样式设置及使用

本次要实现的效果为: 这个DataGrid需要绑定一个集合对象,所以要先定义一个Experience类,包含三个字段 /// <summary> /// 定义工作经历类 /// </summary> public class Experience { /// <summary> /// 获取或设置工作的起始时间 /// </summary> public string Start { get; set; } /// <summary> /// 获

WPF学习系列之八(形状,画刷和变换)

形状,画刷和变换   概述: 在许多用户界面技术中,普通控件和自定义绘图之间具有清晰的区别.通常来说,绘图特性只用于特定的应用程序--如游戏,数据可视化和物理仿真等.而WPF具有一个非常不同的原则.它以相同的方式处理控件和绘制的图形. 一.理解形状.       在WPF用户界面中,绘制2D图形内容的最简单方法是使用形状(shape) :专门用于表示简单的直线,椭圆,矩形以及多边形的类.从技术角度讲,形状就是所谓的绘图图元.可以组合这些基本元素来创建更复杂的图形.形状最重要的细节是,它们都继承自

WPF设计の画刷(Brush)

原文:WPF设计の画刷(Brush) 一.什么是画刷 画刷是是一种渲染方式,用于填充图形形状,如矩形.椭圆.扇形.多边形和封闭路径.在GDI+中,画刷分为以下几种:SolidBrush,TextureBrush,HatchBrush,LinearGradientBrush和PathGradientBrush.在层次关系上,它们都位于System.Drawing空间下,继承自System.Drawing.Brush类. 画刷主要分为三大类: 1.SolidBrush(实心画刷)我们最常用 实心画刷