WPF画刷介绍

画刷种类 数据来源 适合场景
SolidColorBrush 纯色 简单背景、文字颜色
LinearGradientBrush 线性渐变 渐变背景、立体感
ImageBrush 图片文件(Bitmap) 用图片作为背景或填充
VisualBrush 任何 UI 元素(Visual) 镜像、放大镜、重复复杂图案、内容快照

1.SolidColorBrush

**介绍:**最基础的画刷,用单一、固定的颜色填充区域。它只有颜色一个核心参数。

关键属性:

  • Color:颜色值(直接写颜色名如 Red,或十六进制 #FF8800
  • Opacity(继承自Brush):整体透明度
xaml 复制代码
<!-- 直接使用颜色字符串 -->
<Rectangle Width="100" Height="100" Fill="Blue" />

<!-- 完整标签写法,可额外设置透明度 -->
<Rectangle Width="100" Height="100">
    <Rectangle.Fill>
        <SolidColorBrush Color="Blue" Opacity="0.7"/>
    </Rectangle.Fill>
</Rectangle>

2.LinearGradientBrush

**介绍:**沿一条直线(从起点到终点)平滑过渡多种颜色。你需要定义至少两个 GradientStop(渐变停止点),每个点指定颜色和位置(Offset,0~1)。

关键属性:

  • StartPoint / EndPoint:渐变的起点和终点(默认是 (0,0)(1,1),即左上到右下,相对坐标)
  • GradientStops:渐变停止点集合,包含 ColorOffset
xaml 复制代码
<!-- 从左到右(0,0 → 1,0)的蓝-绿渐变 -->
<Rectangle Width="200" Height="50">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
            <GradientStop Color="LightBlue" Offset="0"/>
            <GradientStop Color="LightGreen" Offset="1"/>
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

<!-- 带三个停止点的垂直渐变(上→下) -->
<Rectangle Width="200" Height="50">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            <GradientStop Color="Yellow" Offset="0"/>
            <GradientStop Color="Orange" Offset="0.5"/>
            <GradientStop Color="Red" Offset="1"/>
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

3.ImageBrush(图像画刷)

**介绍:**用一张图片(位图)来填充区域。图片来源可以是项目资源、文件路径或网络URL。它继承自 TileBrush,所以具备拉伸、平铺、裁剪等能力。

关键属性:

  • ImageSource:图片源(例如 "pack://application:,,,/Images/photo.jpg" 或相对路径)
  • Stretch:图片如何拉伸(None/Fill/Uniform/UniformToFill
  • TileModeViewport 等(同VisualBrush,用于平铺)
xaml 复制代码
<!-- 简单背景图(等比填充) -->
<Grid>
    <Grid.Background>
        <ImageBrush ImageSource="C:\Pictures\background.jpg" 
                    Stretch="UniformToFill"/>
    </Grid.Background>
</Grid>

<!-- 平铺小图标作为纹理 -->
<Rectangle Width="200" Height="200">
    <Rectangle.Fill>
        <ImageBrush ImageSource="icon.png" 
                    TileMode="Tile" 
                    Viewport="0,0,32,32" 
                    ViewportUnits="Absolute" 
                    Stretch="None"/>
    </Rectangle.Fill>
</Rectangle>

4.VisualBrush(可视对象画刷)

介绍 :它把任何 Visual(UI元素,如按钮、面板、文本块)渲染成一张"快照"位图,然后用这张位图去填充目标区域。它不是画颜色或图片,而是"画另一个UI的样子"。

关键属性:

  • Visual:要拍摄的源元素(任何继承自 Visual 的对象)
  • Stretch:快照如何拉伸(同ImageBrush)
  • TileMode / Viewport:控制平铺和裁剪区域
  • AlignmentX / AlignmentY:快照在目标区域的对齐方式
xaml 复制代码
    <Grid>
        <Grid.Background>
            <VisualBrush
                TileMode="Tile"
                Viewport="0,0,200,200"
                ViewportUnits="Absolute">
                <VisualBrush.Visual>
                    <TextBlock
                        FontStyle="Normal"
                        Foreground="#bbb"
                        Text="123">
                        <TextBlock.RenderTransform>
                            <RotateTransform Angle="30" />
                        </TextBlock.RenderTransform>
                    </TextBlock>
                </VisualBrush.Visual>
            </VisualBrush>
        </Grid.Background>
    </Grid>
相关推荐
闲云自留地8 小时前
云平台存储管理员:Cinder 创建挂载卷 + Swift 分布式存储原理
分布式·wpf·swift
敲代码的嘎仔1 天前
从集群锁失效到异步领券:我用分布式锁 + Redisson + MQ 把领券接口 RT 从 200ms 压到 15ms
java·数据库·redis·分布式·缓存·ai·wpf
闲云自留地2 天前
OpenStack 的身份管家:Keystone 令牌、RBAC 权限模型拆解
wpf·openstack
FuckPatience3 天前
WPF 窗体唤醒,判断是否已存在,存在则弹出
wpf
程序员清风4 天前
从单体应用到微服务:后端系统拆分的基本方法
微服务·架构·wpf
FuckPatience5 天前
WPF 改变根据某一列条件改变行样式
wpf
dalong105 天前
WPF:DataGrid样式
wpf
samble7 天前
从零搭建工业控制系统(二十二):线程安全与并发控制
c#·wpf·并发·mvvm·线程安全·工业控制
姜穆澜7 天前
OneID 从 0 到 1 完整生产案例(三)
大数据·wpf
dalong107 天前
WPF:MVVM 示例
大数据·wpf