WPF中绘画和动画(三)

1. 矩形

矩形由笔触(Stroke,即边线)和填充(Fill)构成。Stroke属性的设置于Line一样,Fill属性的数据类型是Brush。Brush是个抽象类,所以我们不可能拿一个Brush类的实例为Fill属性赋值而只能用Brush派生类的实例进行赋值。

WPF的绘画系统包含非常丰富的Brush类型,常用的有:

(1) SolidColorBrush:实心画刷。在XAML中可以使用颜色名称字符串(如Red、Blu)直接赋值。

(2) LinearGradientBrush:线性渐变画刷。色彩艳设定的直线方向、按设定的变化点进行渐变。

(3) RadialGradientBrush:径向渐变画刷。色彩沿半径的方向、按设定的变化点进行渐变,形成圆形填充。

(4) ImageBrush:使用图片(Image)作为填充内容。

(5) DrawingBrush:使用矢量图(Vector)和位图(Bitmap)作为填充内容。

(6) VisualBrush:WPF中的每个控件都是由FrameworkElement类派生来的,而FrameworkElement又是由Visual类派生来的。Visual意为“可视”之意,每个控件的可视化形象就可以通过Visual类的方法获得。获得这个可视化的形象后,我们可以用这个形象进行填充,这就是VisualBrush。比如当我想把窗体上的某个控件拽到另一个位置,当鼠标松开之前需要在鼠标只指针下显现一个控件的“幻影”,这个“幻影”就是用VisualBrush填充出来的一个矩形,并让矩形捕捉鼠标的位置、随鼠标移动。

下面是用各种画刷填充矩形的综合实例:

<Window x:Class="WpfApplication1.Window1"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="Rectangle and Brush" Height="390" Width="600">

    <Grid Margin="10">

        <Grid.RowDefinitions>

            <RowDefinition Height="160"/>

           <RowDefinition Height=" 10"/>

            <RowDefinition Height="160"/>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="180"/>

            <ColumnDefinition Width="10"/>

            <ColumnDefinition Width="180"/>

            <ColumnDefinition Width="10"/>

            <ColumnDefinition Width="180"/>

        </Grid.ColumnDefinitions>

        <!--实心填充-->

        <Rectangle Grid.Column="0" Grid.Row="0" Stroke="Black" Fill="LightBlue"/>

        <!--线性渐变-->

        <Rectangle Grid.Column="2" Grid.Row="0">

            <Rectangle.Fill>

                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">

                    <GradientStop Color="#ffb6f8f1" Offset="0"/>

                    <GradientStop Color="#ff0082bd" Offset="0.25"/>

                    <GradientStop Color="#ff95deff" Offset="0.6"/>

                    <GradientStop Color="#ff004f72" Offset="1"/>                   

                </LinearGradientBrush>

            </Rectangle.Fill>

        </Rectangle>

       <!--径向渐变-->

        <Rectangle Grid.Column="4" Grid.Row="0">

            <Rectangle.Fill>

                <RadialGradientBrush>

                    <GradientStop Color="#ffb6f8f1" Offset="0"/>

                    <GradientStop Color="#ff0082bd" Offset="0.25"/>

                    <GradientStop Color="#ff95deff" Offset="0.75"/>

                    <GradientStop Color="#ff004f72" Offset="1.5"/>                   

                </RadialGradientBrush>

            </Rectangle.Fill>

        </Rectangle>

        <!--图片填充-->

        <Rectangle Grid.Column="0" Grid.Row="2">

            <Rectangle.Fill>

                <ImageBrush ImageSource=".\Images\logo.bmp" Viewport="0,0,0.3,0.15" TileMode="Tile"/>

            </Rectangle.Fill>

        </Rectangle>

        <!--矢量图填充-->

        <Rectangle Grid.Column="2" Grid.Row="2">

            <Rectangle.Fill>

                <DrawingBrush Viewport="0,0,0.2,0.2" TileMode="Tile">

                    <DrawingBrush.Drawing>

                        <GeometryDrawing Brush="LightBlue">

                            <GeometryDrawing.Geometry>

                                <EllipseGeometry RadiusX="10" RadiusY="10"/>

                            </GeometryDrawing.Geometry>

                        </GeometryDrawing>

                    </DrawingBrush.Drawing>

                </DrawingBrush>

            </Rectangle.Fill>

        </Rectangle>

        <!—无填充,用线性渐变填充边线-->

        <Rectangle Grid.Column="4" Grid.Row="2" StrokeThickness="10">

            <Rectangle.Stroke>

                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">

                    <GradientStop Color="White" Offset="0.3"/>

                    <GradientStop Color="Black" Offset="1"/>

                </LinearGradientBrush>

            </Rectangle.Stroke>

        </Rectangle>

    </Grid>

</Window>

实际效果如下图所示:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现WPF动画,可以使用WPF的3D功能和动画功能结合起来。下面是一个示例代码,演示了如何在WPF创建一个简单的动画: ```xaml <Window x:Class="Wpf3DAnimation.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF 3D Animation" Height="450" Width="800"> <Grid> <Viewport3D> <Viewport3D.Camera> <PerspectiveCamera Position="0, 0, 5" LookDirection="0, 0, -1" UpDirection="0, 1, 0" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="-1,-1,0 1,-1,0 -1,1,0 1,1,0" TriangleIndices="0 1 2 1 3 2" /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial Brush="Red" /> </GeometryModel3D.Material> </GeometryModel3D> </Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> <Viewport3D.Triggers> <EventTrigger RoutedEvent="Viewport3D.Loaded"> <BeginStoryboard> <Storyboard> <Rotation3DAnimation From="0,0,0" To="0,360,0" Duration="0:0:5" RepeatBehavior="Forever"> <Rotation3DAnimation.By> <AxisAngleRotation3D Axis="0,1,0" Angle="1" /> </Rotation3DAnimation.By> </Rotation3DAnimation> </Storyboard> </BeginStoryboard> </EventTrigger> </Viewport3D.Triggers> </Viewport3D> </Grid> </Window> ``` 这个示例,我们创建了一个窗口,并在窗口添加了一个Viewport3D元素。Viewport3D是用于显示3D内容的容器。我们在Viewport3D添加了一个PerspectiveCamera元素作为相机,用于定义观察场景的位置和方向。 然后,我们创建了一个ModelVisual3D元素,并将其添加到Viewport3D。ModelVisual3D用于包含3D模型的可视化内容。在这个示例,我们创建了一个GeometryModel3D元素,并将其添加到ModelVisual3D的Content属性。GeometryModel3D用于定义3D模型的几何形状和材质。 在GeometryModel3D,我们使用MeshGeometry3D定义了一个简单的四边形,并使用DiffuseMaterial定义了材质为红色。 最后,我们在Viewport3D的Triggers添加了一个EventTrigger,当Viewport3D加载完成时触发。在触发器,我们创建了一个Storyboard,并在其添加了一个Rotation3DAnimation,用于对模型进行旋转动画。通过设置From和To属性,我们定义了旋转的起始角度和结束角度。通过设置By属性,我们定义了旋转的增量。通过设置Duration属性,我们定义了动画的持续时间。通过设置RepeatBehavior属性,我们定义了动画的重复行为。 这样,当窗口加载完成时,模型就会开始旋转动画

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值