使用silverlight构建一个工作流设计器(七)2009-11-09 cnblogs chegan最新源代码下载:http://shareidea.net/opensource.htm最新版本在线演示:http://www.shareidea.net/workflow.htm本章包括两部分内容,一个是在活动类上拖拽鼠标自动生成规则,另一个是网友的反馈,就是规则的端点不要在活动的中心,而要在活动的边缘。五 美化5.9 使用鼠标拖拽自动生成规则本章内容将给系统增加一个非常好的用户体验功能。之前我们增加一个设置一个规则需要以下几个步骤:点击 增加规则 按钮,添加一个规则到容器中。拖动规则的起始部分,关联的一个活动。拖动规则的结尾部分,关联到一个活动。虽然只需要动动鼠标,已经很简单了,但是还有没有更简单的呢?当然有,当鼠标在活动的中心区按下,并拖动鼠标,那么会自动生成一个临时规则,这个规则的开始活动自动关联到刚才点击的活动,临时规则的结尾点随鼠标移动,这个过程用下图来说明:

接下来来看一下为了完成以上功能需要做的工作有哪些。1.需要在活动上定出一个中心区域在活动的xaml文件中增加一个圆形图,以规则的中心为中心点,为了看的清楚,这个中心区域使用黄色填充,透明度设为0.3。2.监控中心区域的MouseLeftButtonDown事件当鼠标在中心区域按下时,自动生成一个临时的规则,并将这个规则的起始活动设为当前活动,把这个规则传递给第三步中的全局临时规则,代码如下:
if (_container.CurrentTemporaryRule == nul)
{
_container.CurrentTemporaryRule = new Rule(_container);
_container.CurrentTemporaryRule.IsTemporaryRule = true;
_container.AddRule(_container.CurrentTemporaryRule);
_container.CurrentTemporaryRule.SetBeginActivity(this);
_container.CurrentTemporaryRule.EndPointPosition = _container.CurrentTemporaryRule.BeginPointPosition;
_container.CurrentTemporaryRule.ZIndex = _container.NextMaxIndex;
}