Welcome

首页 / 软件开发 / Silverlight / 使用silverlight构建一个工作流设计器(十五)(缩放流程图)

使用silverlight构建一个工作流设计器(十五)(缩放流程图)2009-11-20 博客园 chegan当流程过于复杂,流程环节过多时,在一个屏幕中不能完全显示整个流程图,需要拖拽滚动条来显示。这对于了解整个流程的概况有些不便,联想到一些看图软件的缩放功能,如果可以给流程增加缩放,那么就可以很好的解决流程图过于复杂而不便查看的问题了。

十、增加流程图缩放功能

流程缩放要考虑活动和规则的缩放,对于活动和规则,他们的缩放方式稍有不同。

对于活动,缩放会影响两个地方,一个是活动的位置,也就是相对于容器的Top和Left属性。另一个是活动本身的图形的大小。

对于规则,缩放只会影响到规则的位置。如果规则关联到活动,那么规则的位置不进行缩放计算,而是跟随关联的活动进行位置的改变。

首先要给IElement接口增加一个缩放方法,void Zoom(double zoomDeep),这个方法中的参数zoomDeep说明了缩放的比例。下面分别在活动和规则中实现这个方法。

10.1 活动缩放

上面讲到了,活动的缩放影响到两个方面,一个是活动的位置,一个是活动的大小。对于给定的缩放比例大小(zoomDeep),只需要将这个zoomDeep应用到位置和大小即可。但有一点非常重要的是,缩放指的是对原图进行的缩放,因此需要记录一下活动的原始大小,以及原始位置(每位位置发生变动,例如活动被拖拽时,重新记录一下位置信息)。

使用下面的方法对活动进行缩放处理

//图片原始宽

double origPictureWidth = 0;

//图片原始高

double origPictureHeight = 0;

//图片原始位置

Point origPosition;

//位置是否发生改变

boopositionIsChange = true;
public void Zoom(double zoomDeep)
{
if (origPictureWidth == 0)
{
origPictureWidth = sdPicture.PictureWidth;
origPictureHeight = sdPicture.PictureHeight;
}
if (positionIsChange)
{
origPosition = this.Position;
positionIsChange = false;
}
sdPicture.PictureHeight = origPictureHeight * zoomDeep;
sdPicture.PictureWidth = origPictureWidth * zoomDeep;
this.Position = new Point(origPosition.X * zoomDeep, origPosition.Y * zoomDeep);
}