WPF学习:3.Border & Brush

上一章《WPF学习:2.Layout-Panels-Countainers》主要介绍了布局,容器和面板。这一章主要开始介绍Border(边界)和Brush(画刷)。

  代码地址:http://www.cnblogs.com/keylei203/archive/2013/03/12/keylei203.html

引言

  在任何WPF的程序设计中,Border都占主要部分,一般都会使用很多Border装饰用户界面。从直接在window上放置borders到在ListBoxItem上放置Borders,boarder在美化界面方面起到了重要的作用。

  Border确切来说只是一个可以放置UI元素的矩形区域,但是Border和Rectangle最大的不同是Border允许放置一个简单的子元素在其中,看下面例子:

1 <Border Width="50" Height="50" x:Name="brdElement">
2   <Border.Background>
3      <SolidColorBrush Color="Bisque"></SolidColorBrush>
4   </Border.Background>
5   <Border.Effect>
6     <DropShadowEffect BlurRadius="10" Color="Red" Direction="235" Opacity=".5"
7            RenderingBias="Quality" ShadowDepth="10" />
8   </Border.Effect>
9 </Border> 

  效果图:,仔细分析上面的代码,Width/Height指定了Border的的尺寸,Board.Background通过Brush指定背景的颜色,SolidColorBrush可以设置任何颜色的Brush,它的属性待会讨论。

  Board.Effect使用了一个DrowShaowEffect来增加阴影效果,需要注意的属性如下:

  1.Color:阴影颜色

   2.Opacity:透明度,范围0-1,0完全透明。

3.BlurRadius:模糊半径,可以增加这个系数来增加阴影的程度。0:,50:

   4.Direction:方向,0-360. 0:,90:

   5.ShdaowDepth:阴影深度,值越大,阴影被拖的就越远。0:,20:

讨论更多的例子:

 1 <Border Width="50" Height="50" x:Name="brdElement">
 2                 <Border.Background>
 3                     <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
 4                         <LinearGradientBrush.GradientStops>
 5                             <GradientStop Color="Red" Offset="0"/>
 6                             <GradientStop Color="Pink" Offset=".5"/>
 7                             <GradientStop Color="Azure" Offset="1"/>
 8                         </LinearGradientBrush.GradientStops>
 9                     </LinearGradientBrush>
10                 </Border.Background>
11                 <Border.Effect>
12                     <DropShadowEffect BlurRadius="10" Color="Red"
13              Direction="45" Opacity=".4" RenderingBias="Performance" ShadowDepth="30" />
14                 </Border.Effect>
15             </Border>

  第一个例子中,使用SolidColorBrush指定一个3步的LinearGradientBrush,StartPoint和EndPoint必须指定,StartPoint是梯度开始的点,(0,0)代表左上角,(1,1)代表右下角第一个0代表X的偏置,第二个0代表Y的偏置, 我使用了坐标是(0,0)-(1,1)从从左上角到右下角,Gradient是直线变化,GradientStops定义了Gradient的颜色。offset是相对量表示,表示此点的位置是在开始位置向重点位置相对比列, 这里我定义所有的颜色从0到1,效果是坐标(0,0)为红色,坐标(0.5,0.5)为粉红色,(1,1)为蔚蓝色,颜色呈斜下的渐变。

  再看这一个例子:

 1 <Border Width="50" Height="50" x:Name="brdElement" BorderBrush="Goldenrod"
 2              BorderThickness="2">
 3                 <Border.Background>
 4                     <LinearGradientBrush StartPoint="0,1" EndPoint="1,0">
 5                         <LinearGradientBrush.GradientStops>
 6                             <GradientStop Color="BurlyWood" Offset="0"/>
 7                             <GradientStop Color="MediumBlue" Offset=".5"/>
 8                             <GradientStop Color="SlateGray" Offset="1"/>
 9                         </LinearGradientBrush.GradientStops>
10                     </LinearGradientBrush>
11                 </Border.Background>
12                 <Border.Effect>
13                     <DropShadowEffect BlurRadius="10" Color="CadetBlue" Direction="0"
14             Opacity=".4" RenderingBias="Performance" ShadowDepth="15" />
15                 </Border.Effect>
16             </Border>

  这里我改变了渐变顺序,从左下角到右上角。同时改变了阴影效果的角度和颜色。

更多的画刷

  在前面我们已经讨论了使用常见的LinearGradient和SolidColorBrush的画刷,现在看下其他画刷。

  1.RadialGradientBrush:提供一个圆形的渐变,以一个起始点呈椭圆状向外散发渐变,GradientOriginal表示渐变的源点,默认位置为(.5,.5),即GradientOriginal和Center默认在一起,RadiusX和RadiusY表示椭圆的半径,其均值为0.5.,Offset表示离源点距离指定位置的颜色,将下列代码中的offset对换一下,可以获得第二幅图像。

 1 <BorderWidth="50" Height="50" BorderBrush="Black" BorderThickness="2">
 2                 <Border.Background>
 3                     <RadialGradientBrush GradientOrigin=".25,.75" RadiusX=".6"
 4                      RadiusY=".6">
 5                         <RadialGradientBrush.GradientStops>
 6                             <GradientStop Color="Red" Offset="0"></GradientStop>
 7                             <GradientStop Color="Yellow" Offset="1"></GradientStop>
 8                         </RadialGradientBrush.GradientStops>
 9                     </RadialGradientBrush>
10                 </Border.Background>
11             </Border>

  2.ImageBrush:提供能图片的画刷处理,需要指定图片,负责将位图填充到目标区域,Opacity设定图像的透明度。

 1 <Border Width="100" Height="100" >
 2                 <Border.Background>
 3                     <ImageBrush ImageSource="图像路径" Opacity=".7">
 4                         <!--<ImageBrush.Transform>
 5                             <SkewTransform AngleX="10" AngleY="10" />
 6                         </ImageBrush.Transform>-->
 7                     </ImageBrush>
 8                 </Border.Background>
 9                 <Border.BitmapEffect>
10                     <OuterGlowBitmapEffect GlowColor="Brown" GlowSize="20" Noise="3"/>
11                 </Border.BitmapEffect>
12             </Border>

  使用OuterGlowEffect给图像加上一个效果。

VisualBrush:

  使用Visual对象来填充目标区域,所有控件都派生自Visual。那就意味着无论是一个按钮和RadioButton都完全可以填充到目标区域当中。但是需要注意的是VisualBrush仅仅是绘制了Visual的外观,填充到目标区域的按钮都是不能点击的,RadioButton也是不能选中的。

 1 <Border Width="100" Height="100" x:Name="brdElement" CornerRadius="5" >
 2                 <Border.Background>
 3                     <ImageBrush ImageSource="图像路径" Opacity=".7">
 4                     </ImageBrush>
 5                 </Border.Background>
 6                 <Border.BitmapEffect>
 7                     <BevelBitmapEffect BevelWidth="5" EdgeProfile="BulgedUp"
 8                    LightAngle="90" Smoothness=".5" Relief=".7"/>
 9                 </Border.BitmapEffect>
10             </Border>
11             <Border Width="100" Height="100" Margin="20,0,0,0">
12                 <Border.Background>
13                     <VisualBrush TileMode="FlipXY" Viewport="1,1,1,1"
14          Stretch="UniformToFill" Visual="{Binding ElementName=目标名称}">
15         </VisualBrush>
16                 </Border.Background>
17             </Border>

Bord Effects

  以我先前使用Border的经验来看,一些主要的Border效果是经常用到的。

  所有Border元素派生于支持两种边界效果的Border。

  1.Effect:应用与整个Border,任何在Border内的子元素都会受到效果的影响。

    

      你能够使用BlurEffrct模糊Border内的文本,代码如下:

1 <Border Background="AliceBlue" Width="100" Height="100" CornerRadius="5"
2        BorderBrush="Black" BorderThickness="2">
3                 <Border.Effect>
4                     <BlurEffect Radius="3" RenderingBias="Quality" />
5                 </Border.Effect>
6                 <TextBlock HorizontalAlignment="Center"
7          VerticalAlignment="Center" Text="This is inside Blured Border"
8             TextWrapping="Wrap" TextTrimming="WordEllipsis"/>
9             </Border>

  2. DropShawEffect:作用于Border之外,如上面部分讨论的。

Border BitmapEffects

  Border也能定义BitmapEffect,我在上面部分介绍了OuterGlowBitmapEffect和BevelBitmapEffect,接下来介绍剩下的。

  1.EmbossBitmapEffect:使边界突出,LightAngle指定了突出的角度。

1 <Border Background="AliceBlue" Width="100" Height="100" CornerRadius="5"
2              BorderBrush="Black" BorderThickness="2">
3                 <Border.BitmapEffect>
4                     <EmbossBitmapEffect LightAngle="270" Relief=".4" />
5                 </Border.BitmapEffect>
6                 <TextBlock HorizontalAlignment="Center" Foreground="Gold"
7       FontSize="20" VerticalAlignment="Center" Text="This is Embossed"
8        TextWrapping="Wrap" TextTrimming="WordEllipsis"/>
9             </Border>

  2.DropShadowBitmapEffect:指定dropshadows, 可以附加写噪声。

<DropShadowBitmapEffect Color="Red" Direction="200" Noise=".6"
       ShadowDepth="10" Opacity=".6"/>

注意点

  在实际的软件中,Effect和BitmapEffect会严重影响软件的性能,最好避免使用,或者对小元素使用效果,不能将BitmapEffect使用于整个窗体。

文章来自似水无痕:http://www.cnblogs.com/keylei203/

原文地址:https://www.cnblogs.com/Im-Victor/p/10615022.html

时间: 2024-10-06 00:50:41

WPF学习:3.Border & Brush的相关文章

【WPF学习】第十九章 控件类

原文:[WPF学习]第十九章 控件类 WPF窗口充满了各种元素,但这些元素中只有一部分是控件.在WPF领域,控件通常被描述为与用户交互的元素--能接收焦点并接受键盘或鼠标输入的元素.明显的例子包括文本框和按钮.然而,这个区别有时有些模糊.将工具提示视为控件,因为它根据用户鼠标的移动显示或消失.将标签视为控件,因为它支持记忆码(mnemonics,将焦点转移到相关控件快捷键). 所有控件都继承自System.Windows.Control类,该类添加了一小部分基本的基础结构: 设置控件内容对齐方式

WPF学习10:基于MVVM Light 制作图形编辑工具(1)

图形编辑器的功能如下图所示: 除了MVVM Light 框架是一个新东西之外,本文所涉及内容之前的WPF学习0-9基本都有相关介绍. 本节中,将搭建编辑器的界面,搭建MVVM Light 框架的使用环境. 界面 <Window x:Class="GraphEditor.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http:

命令——WPF学习之深入浅出

WPF学习之深入浅出话命令 WPF为我们准备了完善的命令系统,你可能会问:“有了路由事件为什么还需要命令系统呢?”.事件的作用是发布.传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件送来的消息事件并不做任何限制,每个接收者可已用自己的行为来响应事件.也就是说,事件不具有约束力.命令和事件的区别就在于命令具有约束力. 的确,在实际编程工作中,即使只用事件不用命令程序的逻辑一样被驱动的很好,但我们不能够阻止程序员按照自己的习惯去编写代码.比如保存事件的处理器,程序员可以写S

WPF学习11:基于MVVM Light 制作图形编辑工具(2)

本文是WPF学习10:基于MVVM Light 制作图形编辑工具(1)的后续 这一次的目标是完成 两个任务. 画布 效果: 画布上,选择的方案是:直接以Image作为画布,使用RenderTargetBitmap绑定为Image的图片源,这样可以为后续的导出图片功能提供很大的便利. 对拖动栏XAML进行如下修改: <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="

[No000013F]WPF学习之X名称空间详解

原文:[No000013F]WPF学习之X名称空间详解 X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:http://schemas.microsoft.com/winfx/2006/xaml,望文生义,它包含的类均与解析XAML语言相关,所以亦称之为“XAML名称空间”. 与C#语言一样,XAML也有自己的编译器.XAML语言被解析并编译,最终形成微

【WPF学习】第二十章 内容控件

原文:[WPF学习]第二十章 内容控件 内容控件(content control)是更特殊的控件类型,它们可包含并显示一块内容.从技术角度看,内容控件时可以包含单个嵌套元素的控件.与布局容器不同的是,内容控件只能包含一个子元素,而布局容器主要愿意可以包含任意多个牵头元素. 正如前面所介绍,所有WPF布局容器都继承自抽象类Panel,该类提供了对包含多个元素的支持.类似地,所有内容控件都继承自抽象类ContentControl.下图显示了ContentControl类的层次结构. 图 Conten

【WPF学习】第三十五章 资源字典

原文:[WPF学习]第三十五章 资源字典 如果希望在多个项目之间共享资源,可创建资源字典.资源字典只是XAML文档,除了存储希望使用的资源外,不做其他任何事情. 一.创建资源字典 下面是一个资源字典示例,它包含一个资源: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/wi

【WPF学习】第四十四章 图画

原文:[WPF学习]第四十四章 图画 通过上一章的学习,Geometry抽象类表示形状或路径.Drawing抽象类扮演了互补的角色,它表示2D图画(Drawing)--换句话说,它包含了显示矢量图像或位图需要的所有信息. 尽管有几类画图类,但只有GeometryDrawing类能使用已经学习过的几何图形.它增加了决定如何绘制图形的画笔和填充细节.可将GeometryDrawing对象视为矢量插图中的形状.例如,可将标准的窗口元文件格式(.wmf)转换成准备插入用户界面的GeometryDrawi

【WPF学习】第五十五章 基于路径的动画

基于路径的动画使用PathGeometry对象设置属性.尽管原则上基于路径的动画也能用于修改任何适当数据类型的属性,但当动态改变与位置相关的属性时最有用.实际上,基于路径的动画类主要用于帮助沿着一条路径移动可视化对象. 正如在“[WPF学习]第四十三章 路径和几何图形”学过的,PathGeometry对象描述可包含直线.弧线以及曲线的图形.下图显示的示例具有一个PathGeometry对象,该对象包含两条弧线以及一条将最后定义的点连接到起点的直线段.这样就创建了一条闭合的路线,一个小的矢量图像以