.net快速开发平台

工作流+智能表单
帮助企业快速应对变化
使用silverlight构建一个工作流设计器(七)(附最新源代码及在线演示)
 

最新源代码下载:http://shareidea.net/opensource.htm

最新版本在线演示http://www.shareidea.net/workflow.htm

 

技术支持QQ群:85444465

本文系列索引: 

使用silverlight构建一个工作流设计器(一)

使用silverlight构建一个工作流设计器(二)

使用silverlight构建一个工作流设计器(三)

使用silverlight构建一个工作流设计器(四)

使用silverlight构建一个工作流设计器(五)

使用silverlight构建一个工作流设计器(六)

使用silverlight构建一个工作流设计器(七)  

使用silverlight构建一个工作流设计器(八)

使用silverlight构建一个工作流设计器(九)

使用silverlight构建一个工作流设计器(十)  

使用silverlight构建一个工作流设计器(十一)  

本章包括两部分内容,一个是在活动类上拖拽鼠标自动生成规则,另一个是网友的反馈,就是规则的端点不要在活动的中心,而要在活动的边缘。

五 美化

5.9 使用鼠标拖拽自动生成规则

本章内容将给系统增加一个非常好的用户体验功能。之前我们增加一个设置一个规则需要以下几个步骤:

 

l         点击 增加规则 按钮,添加一个规则到容器中。

l         拖动规则的起始部分,关联的一个活动。

l         拖动规则的结尾部分,关联到一个活动。

 

虽然只需要动动鼠标,已经很简单了,但是还有没有更简单的呢? 当然有,当鼠标在活动的中心区按下,并拖动鼠标,那么会自动生成一个临时规则,这个规则的开始活动自动关联到刚才点击的活动,临时规则的结尾点随鼠标移动,这个过程用下图来说明:

 

接下来来看一下为了完成以上功能需要做的工作有哪些。

1.         需要在活动上定出一个中心区域

在活动的xaml文件中增加一个圆形图,以规则的中心为中心点,为了看的清楚,这个中心区域使用黄色填充,透明度设为0.3

2.         监控中心区域的MouseLeftButtonDown事件

当鼠标在中心区域按下时,自动生成一个临时的规则,并将这个规则的起始活动设为当前活动,把这个规则传递给第三步中的全局临时规则,代码如下:

Code

 

1.         在容器类中设置一个全局的临时规则对象

为了能够在容器的层面捕获这个自动生成的临时规则,需要定义一个容器层面的规则引用public Rule CurrentTemporaryRule { get; set; }

2.       监控容器的MouseMove和MouseLeftButtonUp

当鼠标在容器上移动时,如果有临时的规则类,那么设置规则的结束位置,代码如下 

 

Code

 

当放开鼠标时,如果有临时规则,那么检查规则的结束位置是否关联到活动,如果没有关联到任何活动,那么删除这个临时规则, 如果有关联到其他的活动,那么取消临时定义。代码如下:

 

Code

 

通过以上的工作,我们就实现了本文开头所说的部分。 

 

5.10 设置规则的端点在活动的边缘

这个设置可以用下图来说明。

 

  

对于规则的短线设置在活动的边缘,有两种方式可以考虑。

l         一种是找到规则和活动的相交的点(Point),如上图中红色圆圈部分所示

l         另一个是规则出现的活动的固定的点上,如上图蓝色十字相交部分所示

 

对于第一种情况,目前还没有找到一个好的方法来定位这个相交点。 

对于第二种情况就稍微好处理一点了。

 

我们只要处理两个活动的中心点的相对位置, 就可以设置规则的端点的位置,如下图所示

另外当规则为曲线时,程序还需要进一步判断,下一章里面将作进一步改进。

本章内容到此结束,下章将继续根据网友意见修改,谢谢关注:)

posted on 2009-04-29 17:01  chegan  阅读(3150)  评论(12编辑  收藏  举报