博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF DrawingContext Pen
阅读量:6973 次
发布时间:2019-06-27

本文共 3780 字,大约阅读时间需要 12 分钟。

 

View Code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace WPFDrawing{    ///     /// MainWindow.xaml 的交互逻辑    ///     public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            Button_Click(null, null);        }        private void Button_Click(object sender, RoutedEventArgs e)        {            var pts = new PointCollection();            pts.Add(new Point() { X = 10, Y = 10 });            pts.Add(new Point() { X = 300, Y = 300 });            Visual vs = drawCanvas.Polyline(pts, Brushes.Red, 1);            drawCanvas.AddVisual(vs);        }        private void drawCanvas_MouseMove(object sender, MouseEventArgs e)        {            if (e.LeftButton == MouseButtonState.Pressed)            {                var p = e.GetPosition(null);                if (vs != null)                {                    drawCanvas.NewLine(vs, new Point() { X = 10, Y = 10 }, p);                }                Console.WriteLine(p.X + "    " + p.Y);            }        }        DrawingVisual vs = null;        private void drawCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)        {            var p = e.GetPosition(null);            Console.WriteLine(p.X + "    " + p.Y);            vs = drawCanvas.GetVisual(p);            if (vs != null)            {                Console.WriteLine("已经选中了。。。。。");            }        }    }}
View Code
using System.Collections.Generic;using System.Windows.Controls;using System.Windows.Media;using System.Windows;namespace WPFDrawing{    public class DrawingCanvas : Canvas    {        private List
visuals = new List
(); //获取Visual的个数 protected override int VisualChildrenCount { get { return visuals.Count; } } //获取Visual protected override Visual GetVisualChild(int index) { return visuals[index]; } //添加Visual public void AddVisual(Visual visual) { visuals.Add(visual); base.AddVisualChild(visual); base.AddLogicalChild(visual); } //删除Visual public void RemoveVisual(Visual visual) { visuals.Remove(visual); base.RemoveVisualChild(visual); base.RemoveLogicalChild(visual); } //命中测试 public DrawingVisual GetVisual(Point point) { HitTestResult hitResult = VisualTreeHelper.HitTest(this, point); return hitResult.VisualHit as DrawingVisual; } //使用DrawVisual画Polyline public Visual Polyline(PointCollection points, Brush color, double thinkness) { DrawingVisual visual = new DrawingVisual(); DrawingContext dc = visual.RenderOpen(); Pen pen = new Pen(Brushes.Red, 10); pen.Freeze(); //冻结画笔,这样能加快绘图速度 for (int i = 0; i < points.Count - 1; i++) { dc.DrawLine(pen, points[i], points[i + 1]); } dc.Close(); return visual; } public void NewLine(DrawingVisual visual, Point ps, Point pd) { DrawingContext dc = visual.RenderOpen(); Pen pen = new Pen(Brushes.Red, 2); pen.Freeze(); //冻结画笔,这样能加快绘图速度 dc.DrawLine(pen, ps, pd); dc.Close(); } }}
View Code

自定义流程图线段拖动改变长短,只是提供一种思路。

 

转载于:https://www.cnblogs.com/ligl/p/7846688.html

你可能感兴趣的文章
中缀、前缀和后缀表达式
查看>>
Redis 自定义对象 cannot be cast to java.lang.String
查看>>
[题解]第十一届北航程序设计竞赛预赛——H.高中数学题
查看>>
内置对象Array及Array常见操作
查看>>
oracle 表字段新增、修改、删除、重命名以及表重命名
查看>>
Python连接MySQL之Python库pymysql
查看>>
Android 图文教学让你彻底理解activity启动模式
查看>>
串口发送数据处理——状态机方式
查看>>
PTA-BinarySearchTree BasicOperation
查看>>
spring boot 2.0 集成 shiro 和 pac4j cas单点登录
查看>>
docker swarm英文文档学习-4-swarm模式如何运行
查看>>
数据结构和算法——递归算法
查看>>
23.CSS边框与背景【下】
查看>>
用java编写简单Webserver,理解webserver的功能。
查看>>
Struts2的中文乱码问题处理
查看>>
androidstudio 之 svn配置 汇总
查看>>
html基本标签
查看>>
Ubuntu 12.04 安装 VMware Tools 找不到linux-headers 问题
查看>>
TP5 Tree类无限极分类
查看>>
阶段性总结-贪心算法
查看>>