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

相关推荐
桂月二二7 小时前
探讨面向未来的框架新技术:逻辑驱动和自适应框架的突破
wpf
△曉風殘月〆13 小时前
WPF中的Microsoft XAML Behaviors包功能详解
wpf·xaml·behavior
喜欢猪猪1 天前
Apollo中间件技术:从入门到精通
wpf
Thinbug2 天前
WFP Listbox绑定数据后,数据变化的刷新
wpf·listbox
佛·追命2 天前
wpf 国际化 try catch comboBox
wpf
晚安苏州2 天前
WPF 样式
wpf
Crazy Struggle3 天前
开源 Material Design WPF UI 控件库,易用且功能强大
wpf·开源项目·ui控件库·materialdesigninxamltoolkit
是店小二呀3 天前
【仓颉语言基础】语言概念、环境配置与语法解析
开发语言·wpf
唐宋元明清21883 天前
WPF 记录鼠标、触摸多设备混合输入场景问题
wpf·白板
ou.cs4 天前
wpf 重绘一个浮动的圆形按钮
wpf