WPF提供了哪些不同类型的画刷

在WPF中,画刷(Brush)用于填充图形对象(如形状、控件的背景和前景)的颜色和样式。WPF提供了几种不同类型的画刷:

  1. SolidColorBrush:这是最简单的画刷,它提供了一个单一的、固定的颜色。

    xml 复制代码
    <Rectangle Width="100" Height="100">
        <Rectangle.Fill>
            <SolidColorBrush Color="Red"/>
        </Rectangle.Fill>
    </Rectangle>

    效果图如下

  2. 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>

效果图如下:

  1. 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>

效果图如下:

  1. ImageBrush:这个画刷可以使用一个图像来填充形状。

    xml 复制代码
    <Rectangle Width="100" Height="100">
        <Rectangle.Fill>
            <ImageBrush ImageSource="example.jpg"/>
        </Rectangle.Fill>
    </Rectangle>

效果图如下:

  1. 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>

效果图如下:

  1. 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中的画刷,还有一些更深入的主题和技巧:

  1. 渐变画刷中的多个颜色

    LinearGradientBrushRadialGradientBrush中,你可以定义多个GradientStop,每个GradientStop都有自己的颜色和偏移。这意味着你可以创建一个从多个颜色渐变的效果。

  2. 图像画刷的TileMode属性

    ``ImageBrush有一个TileMode属性,它决定了当图像小于需要填充的区域时,图像如何重复。例如,你可以设置TileModeTileFlipXFlipYFlipXY`,以创建不同的重复和翻转效果。

  3. 转换

    所有的画刷都有TransformRelativeTransform属性,允许你对画刷应用转换。例如,你可以使用ScaleTransform来缩放画刷,使用RotateTransform来旋转画刷,或者使用TranslateTransform来移动画刷。你也可以使用TransformGroup来组合多个转换。

  4. 动画

    你可以使用WPF的动画系统来动态地改变画刷的属性。例如,你可以使用ColorAnimation来动态地改变画刷的颜色,使用DoubleAnimation来动态地改变画刷的透明度,或者使用PointAnimation来动态地改变渐变画刷的起点和终点。

  5. 资源

    你可以将画刷定义为资源,然后在多个地方重用。这不仅可以使你的XAML代码更简洁,而且可以让你更方便地更改你的应用的颜色和样式。

例如,你可以在WindowApplicationResources中定义一个画刷:

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中画刷的一些技巧。

相关推荐
huizhixue-IT2 小时前
华为存储考试内容&HCIP-Storage
wpf
桂月二二18 小时前
实时事件流处理架构的容错设计
架构·wpf
源之缘-OFD先行者20 小时前
GMap.NET + WPF:构建高性能 ADS-B 航空器追踪平台
.net·wpf·ads-b
Marzlam1 天前
WPF学习路线
wpf
weixin_535455791 天前
WPF设计学习记录滴滴滴2
学习·wpf
^@^lemon tea^@^1 天前
WPF 浅述IsHitTestVisible属性
wpf·wpf 穿透
lixy5791 天前
C# WPF 命令机制(关闭CanExecute自动触发,改手动)
c#·wpf
Marzlam1 天前
一文了解WPF技术简介
wpf
arriettyandray2 天前
C#/WPF学习系列之问题记录——使用不流畅
c#·wpf
勘察加熊人2 天前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf