本章繼續美化工作,本章內容相當簡單,權當一段流水賬好了。主要包括:1、規則圖形支持曲線。2、增加默認初始化流程圖形。3、支持鼠標雙擊事件。4、控件支持ToopTip。5、自定義容器寬和高。下一章的內容將增加一個非常優秀的用戶體驗功能,這個功能也是受到網友的啟發增加的,不要錯過哦。
最新源代碼下載:http://shareidea.net/opensource.htm
最新版本在線演示:http://www.shareidea.net/workflow.htm
技術支持QQ群:85444465
本文系列索引:
使用silverlight構建一個工作流設計器(一)
使用silverlight構建一個工作流設計器(二)
使用silverlight構建一個工作流設計器(三)
使用silverlight構建一個工作流設計器(四)
使用silverlight構建一個工作流設計器(五)
使用silverlight構建一個工作流設計器(六)
使用silverlight構建一個工作流設計器(七)
使用silverlight構建一個工作流設計器(八)
使用silverlight構建一個工作流設計器(九)
使用silverlight構建一個工作流設計器(十)
使用silverlight構建一個工作流設計器(十一)
本章繼續美化工作,本章內容相當簡單,權當一段流水賬好了。下一章的內容將增加一個非常優秀的用戶體驗功能,這個功能也是受到網友的啟發增加的,敬請關注。
五 美化
本章內容主要包括
1、 規則圖形支持曲線
2、 增加默認初始化流程圖形
3、 支持鼠標雙擊事件
4、 控件支持ToopTip
5、 自定義容器寬和高
5.4 規則圖形支持曲線
在前面的內容中,用來表示規則類的圖形一條直線,當有兩個規則互為反向規則時(這兩個規則的起始活動和結束活動正好對調),那么這兩個規則的直線就重疊在一起了,不好區別。所以在這里把這個直線改為曲線。用下圖來表示這個改變 :

需要做幾個工作,首先在規則類(Rule.xaml)中,把表示直線類(Line)換成表示曲線的類Polyline,在前面的內容中,我們使用兩個點來定位直線,在換成新的Polyline類后,這部分代碼不需要做大的改變,只需要在增加一個中間點,這個中間點表示曲線的轉折點,而這個轉折點的坐標可以根據起始坐標和終點坐標而定,非常簡單。下面的代碼表示了我們新的定位規則曲線的方法。

Code
public void SetRulePosition(Point beginPoint, Point endPoint)
{
begin.SetValue(Canvas.LeftProperty, beginPoint.X);
begin.SetValue(Canvas.TopProperty, beginPoint.Y);
end.SetValue(Canvas.LeftProperty, endPoint.X);
end.SetValue(Canvas.TopProperty, endPoint.Y);
Point p1 = new Point(beginPoint.X + beginPointRadius, beginPoint.Y + beginPointRadius);
Point p3 = new Point(endPoint.X + endPointRadius, endPoint.Y + endPointRadius);
Point p2 = new Point();
if (LineType == RuleLineType.Line)
{
p2 = p1;
}
else
{
if (System.Math.Abs(p1.X - p3.X) < 10)
{
p2 = p1;
}
else
{
p2.X = p1.X;
p2.Y = p3.Y;
}
}
line.Points.Clear();
line.Points.Add(p1);
line.Points.Add(p2);
line.Points.Add(p3);
}
另外在規則配置類中增加規則線條類型的配置信息就可以了。
5.5 增加默認初始化流程圖形
前面的程序在初始化時,容器面板是一片空白,這本章中增加一個初始化的流程圖形。代碼很簡單。

Code
void createNewWorkFlow()
{
Activity begin = new Activity(this);
begin.Type = ActivityType.INITIAL;
begin.ActivityName = "開始";
Activity end = new Activity(this);
end.Type = ActivityType.COMPLETION;
end.ActivityName = "結束";
Rule r = new Rule(this);
AddActivity(begin);
AddActivity(end);
AddRule(r);
r.SetBeginActivity(begin);
r.SetEndActivity(end);
end.Position = new Point(100, 100);
SaveChange(NextOrPreAction.None);
}
最后一段將當前的配置保存在內存中。
5.6 支持鼠標雙擊事件
Silverlight2.0中不支持鼠標雙擊事件,不過這不影響我們使用現有的功能來捕獲鼠標雙擊,網上有一篇文章說明了其中的原理,如下:
http://silverlight.net/blogs/msnow/archive/2009/01/15/silverlight-tip-of-the-day-82-how-to-implement-double-click.aspx
主要使用一個定時器來檢查鼠標兩次點擊之間的時間差,如果這個時間差在一個指定的范圍內,那么這兩次點擊被認為是一次鼠標雙擊事件。
當在規則或者活動上面進行鼠標點擊時,將捕獲這個點擊事件,并且顯示規則或者屬性的編輯窗口。

5.7 活動和規則類支持ToopTip
ToopTip比Html元素中的ToopTip在定制外觀方面強大多了,下面是程序中用到ToopTip的xaml代碼

Code
<ToolTipService.ToolTip>
<ToolTip Name="ttActivityTip" Content="Turtle" FontWeight="Bold" VerticalOffset="10"
HorizontalOffset="10" >
<ToolTip.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="White"
Offset="0"></GradientStop>
<GradientStop Color="DarkCyan"
Offset="0.8"></GradientStop>
</LinearGradientBrush>
</ToolTip.Background>
</ToolTip>
</ToolTipService.ToolTip>
5.8 自定義容器寬和高
自定義寬和高用到了控件Slider,通過事件ValueChanged來動態改變容器對象的寬和高,沒有更多需要解釋的了。
下章的內容很精彩,不要錯過哦。