画刷
Contents
与画刷相关的更基本的方面
– 画刷支持更改通知,因为他们继承自Freezable类。因此,如果改变了画刷,任何使用画刷的元素都会自动重新绘制自身。
– 画刷支持部分透明。为此,只需要修改Opacity属性,使背景能够透过前面的内容进行显示。
– 通过SystemBrushes类可以访问这样的画刷:此类画刷使用Windows系统设置为当前计算定义的首选颜色。
画刷类
名称 | 说明 |
---|---|
SolidColorBrush | 使用单一的连续颜色绘制区域 |
LinearGradientBrush | 使用渐变填充绘制区域,渐变到阴影填充从一种颜色变化到另一种颜色 |
RadialGradientBrush | 使用径向渐变填充绘制区域,除了是在圆形模式中从中心点向外部辐射渐变之外,这种画刷和线性渐变画刷类似 |
ImageBrush | 使用可被拉伸、缩放或平铺的图像绘制区域 |
DrawingBrush | 使用Drawing对象绘制区域,该对象可以包含已经定义的形状和位图 |
VisualBrush | 使用Visual对象绘制区域。因为所有WPF元素都继承自Visual类,所以可使用该画刷将部分用户界面复制到另一个区域。当创建特殊效果时,比如部分反射效果,该画刷特别有用 |
BitmapCacheBrush | 使用从Visual对象缓存的内容绘制区域。这种画刷和VisualBrush类似,但如果需要在多个地方重用图形内容或者频繁地重回图形内容,这种画刷更高效 |
所有画刷都位于System.Windows.Media命名空间中。
SolidColorBrush画刷
//Create a brush from a named color
cmd.background=new SolidColorBrush(Colors.AliceBlue);
//Create a brush from a system color
cmd.Background=SystemColors.ControlBrush;
//Create a brush from color values
int red =0;
int green=255;
int blue=0;
cmd.Foreground=new SolidColorBrush(Color.FromRgb(red,green,blue));
LinearGradientBrush画刷
<Rectangle Width="150" Height="100">
<Rectangle.Fill>
<LinearGradientBrush>
<GradientStop Color="Blue" Offset="0" />
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
RadialGradientBrush画刷
为了指定第一种颜色在渐变中的开始点,需要使用GradientOrigin属性,默认情况下,渐变的开始点是(0.5,0.5),该点表示填充区域的中心
<Ellipse Margin="5" Stroke="Black" StrokeThickness="1" Width="200" Height="200">
<Ellipse.Fill>
<RadialGradientBrush RadiusX="1" RadiusY="1" GradientOrigin="0.7,0.3">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="Blue" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
ImageBrush画刷
<Grid>
<Grid.Background>
<ImageBrush ImageSource="logo.jpg"></ImageBrush>
</Grid.Background>
</Grid>
VisualBrush画刷
<Button Name="cmd" Margin="3" Padding="5">Is this a real button></Button>
<Rectangle Margin="3" Height="100">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=cmd}"></VisualBrush>
</Rectangle.Fill>
</Rectangle>
BitmapCacheBrush画刷
该画刷采用可视化内容并要求显卡在显存中存储该内容,当需要时刻快速地重新绘制内容,而不必要求WPF执行任何额外工作。
为了配置位图缓存,设置BitmapCacheBrush.BitmapCache属性
<Button Name="cmd" Margin="3" Padding="5">Is this a real button?</Button>
<Rectangle Margin="3" Height="100">
<Rectangle.Fill>
<BitmapCacheBrush Target="{Binding ElementName=cmd}"
BitmapCache="BitmapCache"></BitmapCacheBrush>
</Rectangle.Fill>
</Rectangle>
BitmapCacheBrush画刷存在严重缺点:渲染位图以及将其复制到显存的处事不周需要比较短但可察觉到的额外时间。在传统窗口中,该画刷起不到多大帮助作用
然而,如果在用户界面中大量使用动画,值得考虑使用位图缓存。可能更愿意通过为每个希望缓存的元素设置更高基的UIElement.CacheMode属性来应用缓存。对于这种情况,WPF在后台使用BitmapCacheBrush画刷获取相同的效果,但需要做的工作更少