title author date CreateTime categories
WPF DrawingVisual
lindexi
2018-08-10 19:16:53 +0800
2018-2-13 17:23:3 +0800
WPF

本文:如何自定义控件用 DrawingVisual 画图

本文不会讲 DrawingVisual 是什么,只会告诉简单方法画图。

为何需要学这个?如果需要画出图形,对性能有要求,或者需要了解WPF如何画图,就需要知道这个。

先创建最简单使用,就是显示文字或显示点。

我觉得显示文字简单,于是开始写代码,先不要去想做什么,代码需要一个控件和一个画出文字的类。

首先新建一个控件,他是可以让 DrawingVisual 显示。

    public class MyVisualHost : FrameworkElement

这是很基础一个类,几乎没有什么功能。

于是新建一个 FrameworkElement 需要添加 一些方法,这是默认的,只需要自动创建就好。

这个类不是主要的,他是让DrawingVisual显示,在构造函数写下面的代码

这就是可以让 他可以显示。为何这样可以,参见:http://blog.csdn.net/changtianshuiyue/article/details/26981797

主要的类StrokeVisual,其实很简单,他可以在上面的类显示文字

        public class StrokeVisual : DrawingVisual

来看下他的方法

这样就可以画出文字。

需要在xaml添加下面代码,就可以显示出来

            <local:MyVisualHost></local:MyVisualHost>

为什么这样就可以画出?

那么如何做一个鼠标点下就画点的软件?

调用 RenderOpen 就可以打开一个 DrawingContext ,他提供很多方法,在他上面使用就可以画出,不过画出来看不到。需要添加到FrameworkElement才可以。

那么如何做出下图的程序?

首先对代码做修改,在 Windows 的MouseMove 调用 StrokeVisual 的 Add 方法和 画出来

需要获得鼠标的位置,获得方法很简单,在 MouseMove 函数写下面的代码,其中 e 就是参数

    p=e.GetPosition(this);

传入 StrokeVisual 调用他的 Draw 可以看到他画出来了

            _s.Add(new StylusPoint(p.X, p.Y));
_s.Draw();

那么需要看下添加的函数如何写,下面代码就是整个 StrokeVisual 的代码。

        public StrokeVisual()
{
Stroke = new Stroke(new StylusPointCollection(new Point[] { new Point(10, 10), }), new DrawingAttributes()
{
}); } public void Add(StylusPoint point)
{
Stroke.StylusPoints.Add(point);
} private Stroke Stroke;

那么如何从 Stroke 画出?

可以使用 Stroke 传入 dc 就可以画出来。

            using (var dc = RenderOpen())
{
Stroke.Draw(dc);
}

代码很简单,建议自己去写,我就不把代码给你。如果自己无法写,需要代码,那么联系我发代码给你。

最新文章

  1. 解决CSharpGL使用CGCompiler时发现的几个问题
  2. Apache与Nginx区别
  3. SQL 查询两个字段相同表的不同记录
  4. [译]C++, Java和C#的编译过程解析
  5. Java Sax解析
  6. Selenium_模拟淘宝登录Demo
  7. C++学习基础八——重载输入和输出操作符
  8. 配置jenkins,并把iOS包自动上传至fir.im
  9. 百度地图开发的学习(一)——配置环境&amp;基础地图
  10. Cas_Java客户端登录相关过滤器的处理流程
  11. ODS浅谈
  12. 从zepto中学习方法
  13. Android中通过广播方式调起第三方App
  14. 理解 Memory barrier
  15. SimpleHttpServer的学习(1)
  16. 事件:target与currentTarget区别
  17. IOS中UIDatePicker
  18. JavaScript 二进制转文件
  19. Python全栈之路----数据类型—字典
  20. 536. Construct Binary Tree from String 从括号字符串中构建二叉树

热门文章

  1. picker多级选择器的使用————小程序
  2. 数据结构---Java---String
  3. 理解Java的Class类、&quot;this.&quot;关键字、Constructor构造器(一)
  4. ThreadLocal内存泄漏
  5. UNP学习第五章
  6. 常见sql操作
  7. paper 148: Face Databases
  8. 服务器一般达到多少QPS比较好?
  9. node 桌面应用开发
  10. Android 架构师技能图谱