使用silverlight构建一个工作流设计器(八)2009-11-09 cnblogs chegan源代码下载:http://www.shareidea.net/opensource.htm在线演示:http://www.shareidea.net/workflow.htm视频教程: http://www.shareidea.net/video/sharedesigner/sharedesigner.htm本文源地址:http://www.cnblogs.com/chegan/archive/2009/05/04/1448515.htm从这一版本开始,本程序正是命名为 ShareDesiner.S本章主要是增强用户体验功能,包括:1、支持对象多选(包括鼠标和键盘两种方式,类似windows中选择多个文件的方式)。2、支持选中的对象群组移动。3、支持选中的对象拷贝和粘贴(活动和规则)。4、支持更多键盘操作Ctr+A(全选),Ctr+C(拷贝),Ctr+V(粘贴),Ctr+Z(回退),Delete(删除)。5、更多右键菜单。如果您没有耐心继续往下看了,请看上面的视频教程吧。六 增强的用户体验功能6.1 支持选择多个对象对于选择多个对象,我们可以参考windows中选择多个文件的方式。包括两种方式:按住Ctrl键,然后用鼠标一次点击选择的文件,被选中的文件以不同的颜色显示。按下鼠标左键,然后拖动鼠标,在屏幕上画出一个矩形,处在矩形中的文件被选中,同时以不同的颜色显示。我们给活动和规则增加一个属性 IsSelectd,表示对象是否被选中。如果被选中,那么背景颜色使用区别于没有选中的对象颜色。如下图所示:

同时,在容器类中增加一个属性CurrentSelectedControlCollection,用以存储当前被选中的对象集合。对于第一种方法,在对象的MouseLeftButtonDown中编写代码,设置对象的IsSelected=!IsSelected,同时将对象加入到容器的CurrentSelectedControlCollection集合中。对于第二种方法,首先需要根据鼠标在容器内的拖拽动作画出相应的矩形,当鼠标松开时,遍历当前所有容器中的对象,检查对象是否在鼠标画出的矩形区域内,如果在,那么设置对象的IsSelected=true,并将对象添加到容器的属性CurrentSelectedControlCollection中即可。如下图所示: