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

相关推荐
林子漾17 小时前
【paper】分布式无人水下航行器围捕智能目标
分布式·wpf
wyh要好好学习1 天前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf
lgcgkCQ2 天前
任务调度中心-XXL-JOB使用详解
java·wpf·定时任务·任务调度
Vicky&James2 天前
英雄联盟客户端项目:从跨平台Uno Platform到Win UI3的转换只需要30分钟
github·wpf·跨平台·英雄联盟·winui·unoplatform
就是有点傻2 天前
WPF中如何使用区域导航
wpf
她说彩礼65万2 天前
WPF程序设置单例启动(互斥体)
wpf
就是有点傻2 天前
WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用
wpf
月落.2 天前
WPF中MVVM工具包 CommunityToolkit.Mvvm
wpf·mvvm
月落.2 天前
WPF Prism框架
wpf·prism
Crazy Struggle3 天前
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
vue·wpf·winform·.net 8.0·通用权限管理