Silverlight WorkFlow画图--Canvas画布的处理

Silverlight WorkFlow画图--Canvas画布的处理,第1张

概述前面简单的介绍了 Activity控件以及ArrowLine控件 Activity和ArrowLine这两个控件,最终得要一个地方展现出来,而这个地方就在--Canvas画布上 在Canvas画布上可以添加好多Activity和ArrowLine控件 但是怎么把这些Activity和ArrowLine控件关联起来呢 今天就简单的写一下,个人水平有限 如的什么可以改进的地方,还望各位告诉一下 还是拿

前面简单的介绍了 Activity控件以及Arrowline控件

Activity和Arrowline这两个控件,最终得要一个地方展现出来,而这个地方就在--Canvas画布上

在Canvas画布上可以添加好多Activity和Arrowline控件

但是怎么把这些Activity和Arrowline控件关联起来呢

今天就简单的写一下,个人水平有限

如的什么可以改进的地方,还望各位告诉一下

还是拿图说话吧


Canvas画布的Activity控件在右边的控件里增加进来的

而Arrowline带箭头的线是左键按下时画出来的分三部

第一:目前Arrowline画线是左键按下的时候,把当前的鼠标的坐标(foot)记录下来 ,在new Arrowline的时候,把坐标(foot)传给Arrowline里去;这样线的尾部的坐标就算确定了,

第二:然后拖动鼠标的时候,记录当前移动鼠标的坐标(cap),同时修改 Arrowline箭头的坐标(cap);

第三:鼠标松开的时候,一条带箭头的线就划完了;

画完的线不想用了内能删除,不能移动(以后改进一下...)

也与一Activity控件之间没有任何关系。


现在开始说一下Canvas有哪些的三个事件MouseleftbuttonDown、MouseMove、MouseleftbuttonUp。

第一个是MouseleftbuttonDown:

左键的时候,流程如下:

代码如下:

            e.Handled = true;            isMove = true;            Point p = e.Getposition(print);            if (_newline != null && p == _newline.StartPoint)            {                return;            }            FrameworkElement element = sender as FrameworkElement;            element.CaptureMouse();            double top = p.Y;            double left = p.X;            _newline = new Arrowline(p,p);            _newline.name = string.Format("Arrowline_{0}",++Index);            _newline.lineGuID = Wrapper.GuIDValue;            CreateArrowline(_newline);


第二个MouseMove:

鼠标在Canvas上移动的时流程图大致如下:

代码如下:

            if (isMove)            {                Point p = e.Getposition(print);                if (p == _newline.StartPoint)                {                    RemoveArrowline(_newline);                }                else                {                    _newline.EndPoint = p;                }            }


第三个MouseleftbuttonUp:

鼠标d起来的时流程图大致如下:

代码如下:

 isMove = false;            Is_Activity = false;            //e.Handled = false;            FrameworkElement element = sender as FrameworkElement;            element.ReleaseMouseCapture();            if (_newline == null)            {                return;            }            Point p = e.Getposition(print);            if (p == _newline.StartPoint)            {                RemoveArrowline(_newline);            }            else            {                //-->如果当前的箭头,所连接的控件,与移动进去的控件不是同一控件的话。                foreach (var v in DictControls)                {                    IActivity iact = v.Value as IActivity;                    if (null == iact)                    {                        continue;                    }                    //-->获取当前控件的                    double top = Canvas.Gettop(v.Value);                    double left = Canvas.Getleft(v.Value);                    //-->判断当前的箭头进入Activity控件区域                    if ((p.X >= left && p.X <= (left + v.Value.WIDth)) && (p.Y >= top && p.Y <= (top + v.Value.Height)))                    {                        //-->判断当前的箭头是否可以连接到Activity控件上去。                        if (!iact.IsConnection())                        {                            MessageBox.Show("不能连接");                            RemoveArrowline(_newline);                            continue;                        }                        //-->当前线的尾部控件与当前进入的控件相同,不进行 *** 作                        if (null != _newline.ArrowFootControl && _newline.ArrowFootControl.Equals(v.Value))                        {                            continue;                        }                        IActivity arrowFoot = _newline.ArrowFootControl as IActivity;                        if (arrowFoot != null && arrowFoot.CheckedArrowIsExists(iact))                        {                            MessageBox.Show("已经存在相同的线了");                            RemoveArrowline(_newline);                            continue;                        }                        string _point = string.Format("X_{0}_Y_{1}",_newline.StartPoint.X,_newline.StartPoint.Y);                        if (!iact.DictArrowFootPoint.ContainsKey(_newline))                        {                            iact.DictArrowCapPoint.Add(_newline,_newline);                            _newline.ArrowCapControl = v.Value;                        }                        break;                    }                }            }            _newline = null;
Canvas当的三个事件处理基本说完了 总结

以上是内存溢出为你收集整理的Silverlight WorkFlow画图--Canvas画布的处理全部内容,希望文章能够帮你解决Silverlight WorkFlow画图--Canvas画布的处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1069911.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存