在WPF中,画刷(Brush)用于填充图形对象(如形状、控件的背景和前景)的颜色和样式。WPF提供了几种不同类型的画刷:
-
SolidColorBrush:这是最简单的画刷,它提供了一个单一的、固定的颜色。
xml<Rectangle Width="100" Height="100"> <Rectangle.Fill> <SolidColorBrush Color="Red"/> </Rectangle.Fill> </Rectangle>
效果图如下
-
LinearGradientBrush:这个画刷提供了一个从一种颜色渐变到另一种颜色的效果。
xml<Rectangle Width="100" Height="100"> <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="Red" Offset="0.0"/> <GradientStop Color="Blue" Offset="1.0"/> </LinearGradientBrush> </Rectangle.Fill> </Rectangle>
效果图如下:
-
RadialGradientBrush:这个画刷提供了一个从中心颜色渐变到边缘颜色的效果。
xml<Rectangle Width="100" Height="100"> <Rectangle.Fill> <RadialGradientBrush> <GradientStop Color="Red" Offset="0.0"/> <GradientStop Color="Blue" Offset="1.0"/> </RadialGradientBrush> </Rectangle.Fill> </Rectangle>
效果图如下:
-
ImageBrush:这个画刷可以使用一个图像来填充形状。
xml<Rectangle Width="100" Height="100"> <Rectangle.Fill> <ImageBrush ImageSource="example.jpg"/> </Rectangle.Fill> </Rectangle>
效果图如下:
-
DrawingBrush :这个画刷可以使用一个
Drawing
对象来填充形状。Drawing
对象可以包含复杂的图形和文本。xml<Rectangle Width="100" Height="100"> <Rectangle.Fill> <DrawingBrush> <DrawingBrush.Drawing> <GeometryDrawing Geometry="M 50,50 L 70,70 70,50 Z" Brush="Blue"/> </DrawingBrush.Drawing> </DrawingBrush> </Rectangle.Fill> </Rectangle>
效果图如下:
-
VisualBrush :这个画刷可以使用一个
Visual
对象来填充形状。Visual
对象可以包含复杂的图形、文本和控件。xml<Rectangle Width="100" Height="100"> <Rectangle.Fill> <VisualBrush> <VisualBrush.Visual> <Button Content="Hello, world!" Background="Yellow"/> </VisualBrush.Visual> </VisualBrush> </Rectangle.Fill> </Rectangle>
效果图如下:
这些画刷为你提供了丰富的选项,可以创建各种各样的图形效果。你可以根据需要选择和组合这些画刷,甚至可以在代码中动态地创建和修改这些画刷。
当然,关于WPF中的画刷,还有一些更深入的主题和技巧:
-
渐变画刷中的多个颜色
在
LinearGradientBrush
和RadialGradientBrush
中,你可以定义多个GradientStop
,每个GradientStop
都有自己的颜色和偏移。这意味着你可以创建一个从多个颜色渐变的效果。 -
图像画刷的TileMode属性
``ImageBrush
有一个
TileMode属性,它决定了当图像小于需要填充的区域时,图像如何重复。例如,你可以设置
TileMode为
Tile,
FlipX,
FlipY或
FlipXY`,以创建不同的重复和翻转效果。 -
转换
所有的画刷都有
Transform
和RelativeTransform
属性,允许你对画刷应用转换。例如,你可以使用ScaleTransform
来缩放画刷,使用RotateTransform
来旋转画刷,或者使用TranslateTransform
来移动画刷。你也可以使用TransformGroup
来组合多个转换。 -
动画
你可以使用WPF的动画系统来动态地改变画刷的属性。例如,你可以使用
ColorAnimation
来动态地改变画刷的颜色,使用DoubleAnimation
来动态地改变画刷的透明度,或者使用PointAnimation
来动态地改变渐变画刷的起点和终点。 -
资源
你可以将画刷定义为资源,然后在多个地方重用。这不仅可以使你的XAML代码更简洁,而且可以让你更方便地更改你的应用的颜色和样式。
例如,你可以在Window
或Application
的Resources
中定义一个画刷:
xml
<Window.Resources>
<LinearGradientBrush x:Key="MyGradient" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Red" Offset="0.0"/>
<GradientStop Color="Blue" Offset="1.0"/>
</LinearGradientBrush>
</Window.Resources>
然后,你可以在你的XAML代码的任何地方使用这个画刷:
xml
<Rectangle Width="100" Height="100" Fill="{StaticResource MyGradient}"/>
全部代码如下:
csharp
<Window x:Class="WpfApp_NET8.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp_NET8"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<LinearGradientBrush x:Key="MyGradient" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Gray" Offset="0.0"/>
<GradientStop Color="Pink" Offset="1.0"/>
</LinearGradientBrush>
</Window.Resources>
<Grid>
<!--固体画刷-->
<Rectangle Width="100" Height="100" Margin="20,20,664,292">
<Rectangle.Fill>
<SolidColorBrush Color="Red"/>
</Rectangle.Fill>
</Rectangle>
<!--线性渐变画刷-->
<Rectangle Width="100" Height="100" Margin="200,20,482,292">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Red" Offset="0.0"/>
<GradientStop Color="Blue" Offset="1.0"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<!--从中心颜色渐变到边缘颜色的效果-->
<Rectangle Width="100" Height="100" Margin="400,31,300,304">
<Rectangle.Fill>
<RadialGradientBrush>
<GradientStop Color="Red" Offset="0.0"/>
<GradientStop Color="Blue" Offset="1.0"/>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
<!--图像画刷, 右键图片属性,生成改为"资源"-->
<Rectangle Width="100" Height="100" Margin="564,31,136,304">
<Rectangle.Fill>
<ImageBrush ImageSource="Images/vs2022.png"/>
</Rectangle.Fill>
</Rectangle>
<!--绘制图形画刷-->
<Rectangle Width="100" Height="100" Margin="28,185,672,150">
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing Geometry="M 50,50 L 70,70 70,50 Z" Brush="Blue"/>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
<!--VisualBrush-->
<Rectangle Height="100" Margin="209,185,378,150">
<Rectangle.Fill>
<VisualBrush>
<VisualBrush.Visual>
<Button Content="Hello, world!" Background="Yellow"/>
</VisualBrush.Visual>
</VisualBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Width="100" Height="100" Fill="{StaticResource MyGradient}" Margin="503,185,197,150"/>
</Grid>
</Window>
运行结果:
以上就是关于WPF中画刷的一些技巧。