使用silverlight構(gòu)建一個(gè)工作流設(shè)計(jì)器(八)(附源代碼下載、在線演示、視頻教程)
源代碼下載:http://www.shareidea.net/opensource.htm
在線演示:http://www.shareidea.net/workflow.htm
視頻教程: http://www.shareidea.net/video/sharedesigner/sharedesigner.html
本文源地址: http://www.rzrgm.cn/chegan/archive/2009/05/04/1448515.html
技術(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ì)器(十一)
從這一版本開始,本程序正是命名為 ShareDesigner.SL
本章主要是增強(qiáng)用戶體驗(yàn)功能,包括:1、支持對象多選(包括鼠標(biāo)和鍵盤兩種方式,類似windows中選擇多個(gè)文件的方式)。2、支持選中的對象群組移動(dòng)。3、支持選中的對象拷貝和粘貼(活動(dòng)和規(guī)則)。4、支持更多鍵盤操作Ctrl+A(全選),Ctrl+C(拷貝),Ctrl+V(粘貼),Ctrl+Z(回退),Delete(刪除)。5、更多右鍵菜單。如果您沒有耐心繼續(xù)往下看了,請看上面的視頻教程吧。
六 增強(qiáng)的用戶體驗(yàn)功能
6.1 支持選擇多個(gè)對象
對于選擇多個(gè)對象,我們可以參考windows中選擇多個(gè)文件的方式。包括兩種方式:
l 按住Ctrl鍵,然后用鼠標(biāo)一次點(diǎn)擊選擇的文件,被選中的文件以不同的顏色顯示。
l 按下鼠標(biāo)左鍵,然后拖動(dòng)鼠標(biāo),在屏幕上畫出一個(gè)矩形,處在矩形中的文件被選中,同時(shí)以不同的顏色顯示。
我們給活動(dòng)和規(guī)則增加一個(gè)屬性 IsSelectd,表示對象是否被選中。如果被選中,那么背景顏色使用區(qū)別于沒有選中的對象顏色。如下圖所示:

同時(shí),在容器類中增加一個(gè)屬性CurrentSelectedControlCollection,用以存儲(chǔ)當(dāng)前被選中的對象集合。
對于第一種方法,在對象的MouseLeftButtonDown中編寫代碼,設(shè)置對象的IsSelected=!IsSelected,同時(shí)將對象加入到容器的CurrentSelectedControlCollection集合中。
對于第二種方法,首先需要根據(jù)鼠標(biāo)在容器內(nèi)的拖拽動(dòng)作畫出相應(yīng)的矩形,當(dāng)鼠標(biāo)松開時(shí),遍歷當(dāng)前所有容器中的對象,檢查對象是否在鼠標(biāo)畫出的矩形區(qū)域內(nèi),如果在,那么設(shè)置對象的IsSelected=true,并將對象添加到容器的屬性CurrentSelectedControlCollection中即可。如下圖所示:

6.2 支持多個(gè)選擇對象的群組移動(dòng)
在前面的內(nèi)容中,我們使用鼠標(biāo)拖動(dòng)一個(gè)對象在容器中移動(dòng),這個(gè)動(dòng)作只限于一個(gè)對象(一個(gè)活動(dòng),或者一個(gè)規(guī)則),當(dāng)用戶選擇多個(gè)對象的時(shí)候,希望對這個(gè)多個(gè)對象進(jìn)行同步的移動(dòng)處理。
我們可以在前面代碼的基礎(chǔ)上進(jìn)行擴(kuò)展,對于一個(gè)對象,我們的代碼已經(jīng)支持了移動(dòng)處理,如果有多個(gè)對象被選中,我們在移動(dòng)其中一個(gè)對象時(shí),需要計(jì)算出當(dāng)前移動(dòng)的位移(x,y座標(biāo)),并把這個(gè)位移參數(shù)傳遞給容器對象,在容器對象中根據(jù)6.1中的內(nèi)容,遍歷當(dāng)前選中的對象,根據(jù)位移參數(shù)重新設(shè)置對象的位移即可。
6.3對象的拷貝和粘貼
單個(gè)對象支持被拷貝和粘貼,選中的群組對象也支持拷貝和粘貼。
6.3.1對象拷貝
對象靠別類似于windows系統(tǒng)中的拷貝文件,對于windows中的拷貝文件,我們得到了一個(gè)完全相同于源文件的備份。對于我們的系統(tǒng)來說,對象包括規(guī)則和活動(dòng),這兩種對象支持拷貝,為了支持拷貝,我們需要給對象增加一個(gè)拷貝的方法。這個(gè)方法放置在相應(yīng)對象的類中,就叫做Clone().在這個(gè)方法中,首先New了一個(gè)新的活動(dòng)或者規(guī)則類,并把當(dāng)前對象有關(guān)的數(shù)據(jù)和位置信息復(fù)制給我們新創(chuàng)建的對象,這樣就得到了一個(gè)對象的拷貝。
使用6.1中的方法,遍歷當(dāng)前所有選中的對象,對于每一個(gè)對象調(diào)用它的Clone方法,并把這些備份的對象放在在容器類的CopyElementCollectionInMemory屬性中,以便進(jìn)行粘貼操作。
6.3.2 對象粘貼
有了6.3.1的對象拷貝,對象粘貼就相對簡單一點(diǎn)了。我們遍歷容器的
CopyElementCollectionInMemory,對于容器中的每一個(gè)對象,設(shè)置它的位置信息,并添加到容器中即可。
6.4 支持更多的鍵盤操作
為了使得用戶操作更加快捷、簡便,我們給系統(tǒng)增加了更多的鍵盤操作功能。包括
l Ctrl+A:選中容器內(nèi)的所有對象
l Ctrl+C:拷貝選中的對象到內(nèi)存中
l Ctrl+V:粘貼內(nèi)存中的拷貝對象
l Ctrl+Z:退回上一步
l Delete:刪除選中的對象
========================================================
比sharepoint更強(qiáng)大的表單功能,圖形化的流程設(shè)計(jì),與asp.net完美結(jié)合,支持vs.net編程擴(kuò)展
========================================================
posted on 2009-05-04 10:21 chegan 閱讀(4055) 評(píng)論(9) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)