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

相关推荐
芝麻科技19 小时前
使用ValueConverters扩展实现枚举控制页面的显示
wpf·prism
笑非不退1 天前
Wpf Image 展示方式 图片处理 显示
开发语言·javascript·wpf
△曉風殘月〆2 天前
在WPF中实现多语言切换的四种方式
wpf·多语言切换
笑非不退2 天前
WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源
c#·wpf
He BianGu2 天前
演示:基于WPF的DrawingVisual开发的频谱图和律动图
wpf·示波器·曲线图·频谱分析仪·频谱图·高性能曲线·自绘
笑非不退5 天前
WPF 设计属性 设计页面时实时显示 页面涉及集合时不显示处理 设计页面时显示集合样式 显示ItemSource TabControl等集合样式
wpf
△曉風殘月〆6 天前
WPF中的XAML详解
wpf·xaml
ithouse6 天前
使用WPF实现一个快速切换JDK版本的客户端工具
java·开发语言·wpf
河西石头6 天前
WPF之UI进阶--控件样式与样式模板及词典
ui·wpf·样式·模板·控件样式·样式模板·样式词典
TA远方6 天前
【WPF】桌面程序开发之窗口的用户控件详解
c#·wpf·usercontrol·用户控件·控件属性