一、WPF 绘画

WPF 可以绘制线段(Line)、矩形(Rectange)、椭圆(Ellipse)、路径(Path)。具体使用如下所示:

 <!--(1)线段:Line-->
<Line X1="0" X2="380" Y1="0" Y2="0" Stroke="Tomato" StrokeThickness="10"></Line>
<Line X1="0" X2="380" Y1="10" Y2="10" Stroke="Teal" StrokeThickness="10" StrokeDashArray="1"></Line>
<Line X1="20" X2="340" Y1="20" Y2="20" Stroke="Sienna" StrokeThickness="10" StrokeStartLineCap="Triangle" StrokeEndLineCap="Round"></Line>
<Line X1="20" X2="340" Y1="30" Y2="30" StrokeThickness="10" StrokeStartLineCap="Round" StrokeEndLineCap="Round">
<Line.Stroke>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Turquoise" Offset="0.9"></GradientStop>
<GradientStop Color="Violet" Offset="0.1"></GradientStop>
</LinearGradientBrush>
</Line.Stroke>
</Line>
<!--(2)矩形:Rectangle-->
<Rectangle Margin="10" Width="340" Height="50" Fill="SlateBlue"></Rectangle>
<!--(3)椭圆:Ellipse-->
<Ellipse Margin="10" Width="50" Height="50" Fill="SandyBrown"></Ellipse>
<!--(4)路径:Path-->
<Path Stroke="SkyBlue" StrokeThickness="10">
<Path.Data>
<LineGeometry StartPoint="10,0" EndPoint="340,100" ></LineGeometry>
</Path.Data>
</Path>

其中,路径(Path)是最强大的工作,它可以组合线段、矩形、椭圆、贝塞尔曲线等,形成复杂的图形,同时可以使用 Path 裁剪不规则的控件。

自定义 Path 如下:

     <!--自定义Path-->
<Path Stroke="Wheat" Fill="Violet" StrokeThickness="10">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure>
<LineSegment Point="50,100"></LineSegment>
<LineSegment Point="100,10"></LineSegment>
<LineSegment Point="150,100"></LineSegment>
<LineSegment Point="200,0"></LineSegment>
<LineSegment Point="0,0"></LineSegment>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>

为了方便编写,简写的自定义 Path 和简写规则如下:

        <!--简写Path-->
<Path Stroke="Coral" StrokeThickness="10" Data="M 0,0 L 380,0"></Path>
<Path Margin="10" Stroke="Coral" StrokeThickness="20" Data="M0,10 L200,10 M100,10 L100,200"></Path>
<Path Stroke="Teal" Data="M0,0 C30,0 70,100 100,100 S170,0 200,0"></Path>

制作不规则窗体和控件时,可以可以把制作好的特殊 Path 的 Data 赋值给控件的 Clip 属性即可,具体如下:

 <Path x:Name="PathClip" Data="M0,0 C30,0 70,100 100,100 S270,0 300,0"></Path>
<Button Height="40" Margin="10" Content="Clip" Click="ButtonBase_OnClick"></Button>
        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
this.Clip = this.PathClip.Data;
}

如果是窗体,需添加设置 AllowsTransparency="True" 和 WindowStyle="None",即使得窗体允许被裁剪。

二、图形的效果与滤镜

WPF 中可以 BitmapEffect 和 Effect 进行模糊设置、投影设置等各种特效。其中,BitmapEffect 的效果渲染主要是依靠 PC 的 CPU 进行的,Effect 是依靠 GPU 进行的。

       <Button Margin="20" Height="50" Content="BitmapEffect">
<Button.BitmapEffect>
<DropShadowBitmapEffect Direction="270" Opacity="0.55" ShadowDepth="20"></DropShadowBitmapEffect>
</Button.BitmapEffect>
</Button>
<Button Margin="20" Height="50" Content="BitmapEffect">
<Button.Effect>
<DropShadowEffect Direction="270" Opacity="0.55" ShadowDepth="20"></DropShadowEffect>
</Button.Effect>
</Button>

三、图形的变形

控制变形的属性有两个:

RenderTransform (呈现变形),定义在 UIElement 中。

LayoutTransform(布局变形),定义在 FramneworkElement 中。

呈现变形和布局变形的主要区别在于,布局变形会影响窗体的布局、导致窗体布局的重新计算,所以较为要消耗计算机性能,而呈现布局只是展示元素出现在哪里,不涉及窗体重新布局。

        <Button Margin="20" Height="50" Content="RenderTransform">
<Button.RenderTransform>
<RotateTransform Angle="45" CenterX="50" CenterY="100"></RotateTransform>
</Button.RenderTransform>
</Button>
<TextBox Margin="20" Height="50" Text="LayoutTransform" VerticalContentAlignment="Center">
<TextBox.LayoutTransform>
<RotateTransform Angle="-90" CenterX="0" CenterY="0"></RotateTransform>
</TextBox.LayoutTransform>
</TextBox>

WPF 之绘画(十一)的更多相关文章

  1. WPF 基础 - 绘画 1) 线段、矩形、圆弧及填充色

    1. 绘画 1.1 图形类型 Line X1.Y1.X2.Y2,Stroke,StrokeThickness Rectangle 矩形 Ellipse 椭圆 Polygon 多边形(自动闭合) Pol ...

  2. WPF 基础 - 绘画 2) Path

    1. Path 霸中霸 既可以替代其他几种图形,也可以将直线.圆弧.贝尔赛曲线组合起来; 重要属性:Geometry Data: 其中 Geometry 为抽象类,不可实例化,可使用其子类: Line ...

  3. 《深入浅出WPF》笔记——绘画与动画

    <深入浅出WPF>笔记——绘画与动画   本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...

  4. WPF 核心体系结构

    WPF 体系结构 主题提供 Windows Presentation Foundation (WPF) 类层次结构,涵盖了 WPF 的大部分主要子系统,并描述它们是如何交互的. System.Obje ...

  5. WPF 体系结构

    转载地址:http://blog.csdn.net/changtianshuiyue/article/details/38963477 本主题提供 Windows Presentation Found ...

  6. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍

    WPF自学入门(十一)WPF MVVM模式Command命令   在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...

  7. 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  8. WPF教程十一:简单了解并使用控件模板

    WPF教程十一:简单了解并使用控件模板 这一章梳理控件模板,每个WPF控件都设计成无外观的,但是行为设计上是不允许改变的,比如使用Button的控件时,按钮提供了能被点击的内容,那么自由的改变控件外观 ...

  9. WPF入门教程系列二十一——DataGrid示例(一)

    前面我们学习了ListView控件的使用示例,今天我们来学习DataGrid的有关知识.提到DataGrid 不管是Asp.Net中的网页开发还是WinForm应用程序开发都会频繁使用.通过它我们可以 ...

随机推荐

  1. 设计模式(七)——适配器模式(SpringMVC框架分析)

    适配器模式 1 现实生活中的适配器例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了. 2 基本介绍 1) 适配器模式(Adapter Pattern)将某个类 ...

  2. linux中在某个目录下多个文件中搜索关键字

    有四种方法: find 文件目录 -name '*.*' -exec grep 'xxx' {} + -n 或是 find 文件目录 -name '*.*' | xargs grep 'xxx' -n ...

  3. Hadoop----hdfs dfs常用命令的使用

    用法    -mkdir    创建目录    Usage:hdfs dfs -mkdir [-p] < paths>    选项:-p    很像Unix mkdir -p,沿路径创建父 ...

  4. 2018 ACM-ICPC 焦作区域赛 E Resistors in Parallel

    Resistors in Parallel Gym - 102028E 吐槽一下,网上搜索的题解一上来都是找规律,对于我这种对数论不敏感的人来说,看这种题解太难受了,找规律不失为一种好做法,但是题解仅 ...

  5. CF1313C2 Skyscrapers (hard version)

    思路: 使用单调栈. 实现: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 con ...

  6. poj1061青蛙的约会 (扩展欧几里德)

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  7. bnuoj24252 Divide

    Alice and Bob has found a island of treasure in byteland! They find N kinds of treasures on the isla ...

  8. Codeforces Round #678 (Div. 2) C. Binary Search (二分,组合数)

    题意:有长度\(n\)的序列,让你构造序列,使得二分查找能在\(pos\)位置找到值\(x\).问最多能构造出多少种排列? 题解:题目给出的\(pos\)是固定的,所以我们可以根据图中所给的代码来进行 ...

  9. C# 通过Internet搜索网络资源

    Internet 网络资源非常丰富,几乎涉及到日常生活和研究的各个方面.流行的搜索引擎像Google.百度.雅虎等都能完成快速搜索网络资源的功能.本节我们将学习用C#实现这些功能的基本思路. 在Sys ...

  10. haproxy 2.2代理后端https服务

    globalmaxconn 100000chroot /usr/local/haproxystats socket /var/lib/haproxy/haproxy.sock mode 600 lev ...