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:渐变停止点集合,包含 Color 和 Offset
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)
  • TileMode、Viewport 等(同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>
相关推荐
蜗牛互联网2 天前
OLMo-core 3的token gerrymandering提醒:MoE路由要按时间窗验收
java·人工智能·wpf
LateFrames2 天前
WPF 升级选型:用 .NET 8 还是 .NET 10
.net·wpf·.net8·.net10
samble3 天前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
SamChan905 天前
PDF页面旋转与CropBox陷阱:译文回填位置总是错位的根因实测
python·ai·pdf·wpf
SamChan906 天前
PDF翻译时页眉页脚总在捣乱?跨页重复文本块的检测与过滤实测
人工智能·python·ai·pdf·wpf
samble13 天前
从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
c#·wpf·mvvm·样式·工业控制
_Jonas13 天前
.net framework开发环境正式环境配置文件的切换
.net·wpf
dalong1015 天前
WPF:Modbus 状态监控
wpf·modbus
He BianGu16 天前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
fogota19 天前
Emoji与Segoe MDL2 Assets的比较
c#·wpf