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 小时前
WPF/WinForms 客户端通过 gRPC 与后端通信:从 Proto 契约到流式调用的完整指南
wpf·grpc·winforms
一见已难忘1 天前
基于 Harmony 6.0 应用的宠物寄养预约系统实现
wpf·宠物
fl1768311 天前
基于C#WPF实现的内存加速球清理类似360加速球内存清理
开发语言·c#·wpf
李高钢1 天前
【WPF】高级 UI 与性能优化实战:从卡顿到丝滑
ui·性能优化·wpf
Chris _data2 天前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf
李高钢2 天前
除了 IDE,C#/WPF 开发者每天离不开的 10 个工具
ide·c#·wpf
李高钢2 天前
用 JetBrains Rider 写 WPF 的 15 个高效技巧:从 VS 转过来也值得看
wpf
李高钢3 天前
【WPF】MVVM 与数据绑定实战:从原理到完整项目
wpf
李高钢3 天前
【WPF】从 Avalon 到 .NET 10:WPF 平台演进史与特性全览
.net·wpf