使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(四)(附最新源代碼及在線演示)
最新源代碼下載:http://www.shareidea.net/opensource.htm
最新版本在線演示:http://www.shareidea.net/workflow.htm
技術(shù)支持QQ群:85444465
本文系列索引:
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(一)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(二)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(三)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(四)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(五)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(六)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(七)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(八)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(九)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(十)
使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(十一)
按計(jì)劃程序到這里就差不多結(jié)束了,但是有很多朋友希望能繼續(xù)完善這個(gè)程序,并增加有關(guān)工作流屬性的內(nèi)容,應(yīng)各位朋友要求,把這個(gè)系列繼續(xù)下去,并增加流程屬性的一些內(nèi)容。工作流在現(xiàn)代企業(yè)中廣泛應(yīng)用,本文不強(qiáng)求完成一個(gè)大而全的流程應(yīng)用,而是做一個(gè)框架類的東西,方便進(jìn)行二次開(kāi)發(fā)和擴(kuò)展。
大家從前面的內(nèi)容可以看出,本文很少直接貼代碼上來(lái),而是主要側(cè)重于創(chuàng)作一個(gè)應(yīng)用程序過(guò)程中的遇到的問(wèn)題以及解決問(wèn)題的思路和方法(當(dāng)然也包括使用silverlight遇到的問(wèn)題)。并且說(shuō)明解決一個(gè)問(wèn)題的多個(gè)方法之間的取舍原因。當(dāng)然這個(gè)原因不是絕對(duì)的,根據(jù)時(shí)間的推移和思路的延伸,我們還可以找到更加合適的解決問(wèn)題的方法。
在這個(gè)學(xué)習(xí)silverlight的過(guò)程中,希望和大家分享一下學(xué)習(xí)的心得,關(guān)于silverlight的,關(guān)于系統(tǒng)設(shè)計(jì)都有,只要使我覺(jué)得比較新鮮有趣的。也希望各位大蝦,新手多多指點(diǎn)。
五 美化
需要美化的內(nèi)容有很多,目前想到并且打算做的部分有以下幾方面的內(nèi)容:
l 規(guī)則使用帶箭頭的直線
l 活動(dòng)根據(jù)不同的活動(dòng)類型顯示不同的形狀。
l 界面調(diào)整
5.1 規(guī)則使用帶箭頭的直線
在silverlight中的 Line類沒(méi)有找設(shè)置箭頭的屬性,所以我們要自己做一個(gè)箭頭放在規(guī)則的尾部,能想到的有兩種方法:
l 使用一個(gè)箭頭的圖片放在規(guī)則的尾部。
l 自己編寫(xiě)一個(gè)表示箭頭的類,并將這個(gè)類放在規(guī)則的尾部。
對(duì)于這兩種方法,都涉及到一個(gè)問(wèn)題,就是根據(jù)規(guī)則在不同的位置,箭頭的方向要隨著規(guī)則的變化角度做一個(gè)改變,以適應(yīng)規(guī)則的角度。
第一種方法比較簡(jiǎn)單,但是使用圖片一個(gè)是增加客戶端下載內(nèi)容的大小,還有不方便改變顯示的顏色,每次改變顏色都要換新的圖片,不方便。那么我們就自己寫(xiě)一個(gè)表示圖片的類,方式在規(guī)則的尾部。
這個(gè)類繼承自System.Windows.Controls.Canvas,我們叫它 Arrowhead ,Arrowhead類包含兩個(gè)子控件,分別是兩個(gè) Line(直線)類,這兩個(gè)直線類按照不同的角度排列,就可以形成一個(gè)箭頭,類似下面的圖形:
把這個(gè)類放在規(guī)則類的尾部,就形成了一個(gè)帶箭頭的直線,如下所示:

這樣用幾個(gè)對(duì)象合成了一個(gè)帶箭頭的直線。
接下來(lái)的問(wèn)題就是當(dāng)直線被拖轉(zhuǎn)進(jìn)行位移和旋轉(zhuǎn)的時(shí)候,箭頭也要隨著進(jìn)行相同的位移和旋轉(zhuǎn)。雖然我們不知道如何具體的實(shí)現(xiàn),但是經(jīng)過(guò)分析得知,這個(gè)旋轉(zhuǎn)的角度和直線的起始點(diǎn)坐標(biāo)位置和終點(diǎn)坐標(biāo)位置有關(guān),那么我們給箭頭類增加一個(gè)方法來(lái)設(shè)置這個(gè)變化,這個(gè)方法有兩個(gè)參數(shù)分別表示直線的起始和終結(jié)位置坐標(biāo),這樣一個(gè)帶箭頭的直線就完成了。這樣的過(guò)程可用下圖來(lái)表示:

接下來(lái)我們?cè)谝?guī)則類的xaml文件中這冊(cè)這個(gè)類,類似下面的代碼:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MouseEnter="UserControl_MouseEnter"
MouseLeave="UserControl_MouseLeave"
xmlns:Shareidea="clr-namespace:Shareidea.Web.UI.Control.Workflow.Designer"
>
其中最后一行
xmlns:Shareidea="clr-namespace:Shareidea.Web.UI.Control.Workflow.Designer"
我們?cè)诋?dāng)前xaml中注冊(cè)了命名空間
Shareidea.Web.UI.Control.Workflow.Designer
那么在當(dāng)前xaml文件中既可以使用類似于
<Shareidea:Arrowhead Name="endArrow" />
這樣的聲明來(lái)使用自定義類了。
下面的代面具體表示了這樣的一個(gè)箭頭類,其中用到了數(shù)學(xué)公式的類,System.Math.Sin(double d),這樣的一個(gè)類用來(lái)計(jì)算一個(gè)角度的Sin值,需要注意的是,我們平常講的30度的Sin不能直接作為參數(shù)傳遞,因?yàn)檫@個(gè)函數(shù)的參數(shù)是一個(gè)弧度值,而不是一個(gè)角度的值,需要做一個(gè)轉(zhuǎn)換,例如 Math.PI * 30/ 180.0 ,經(jīng)過(guò)這樣一個(gè)轉(zhuǎn)換,把角度30轉(zhuǎn)換成一個(gè)弧度值就可以了。
========================================================
比sharepoint更強(qiáng)大的表單功能,圖形化的流程設(shè)計(jì),與asp.net完美結(jié)合,支持vs.net編程擴(kuò)展
========================================================
posted on 2009-04-26 01:44 chegan 閱讀(4866) 評(píng)論(8) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)