欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Silverlight 3中的Behavior技術

系統 1859 0
轉: http://blog.csdn.net/dotnetWalker/archive/2010/03/31/5438704.aspx
Silverlight 3這個版本剛釋出時,讓人感到驚艷的新功能很多,但要說哪一項技術可以徹底改變和提升開發人員與設計師之間的合作方式,并且能夠達成真正的模塊化并且提高程序代碼重用性,對于Silvelright應用程序(或網站)的開發有著決定性的關鍵影響,那非Behavior技術莫屬了。
幾乎我的所有朋友(和客戶們),對于Silverlight加入這個新功能無不大加贊許,它一舉解決了過去designer(設計師或美術人員)和developer(程序設計師)長期的合作與溝通問題,找出了一個可以讓設計師和開發人員好好溝通并且互相配合的方式(這部分是Behavior對于Designer的價值);同時,這個技術也提供了另一種系統開發的可能性,讓不具備高度程序開發技術的開發人員,也可以撰寫出自己需要的系統,并且讓軟件重用性大幅提升(這部分則是Behavior對于Developer的價值)。
Behavior可以把一些常用的行為封裝成可重復使用的組件(Component),這個組件從技術面來說,當然只是沒有外觀的一組類別(Class),而開發人員或設計師可以在Blend 3當中將這個類別的對象實體(instance)『套用(Hook)』到某一個控件上,使得套用了該Behavior的控件可以不須撰寫任何程序代碼,就可以立即擁有(達成)一些和使用者互動的行為。
例如說,當我們把『撥放動畫』這一個Behavior套用在Button這個對象上之后,當用戶點選(Click)Button,則動畫就自動被撥放了,不用寫程序,使用起來就跟拖曳控件一樣自然。這讓設計師(Designer)有機會可以獨立的建置Silvelright應用程序,一掃過去設計師必須時時刻刻依賴開發人員而無法獨立運作的窘境。
這也讓我們有機會把『行為』對象化。請注意,在傳統的面向對象程序設計觀念中,過去我們只把UI層的需求組件化成為控件,而現在我們則可以進一步地把實現(達成)特定功能的代碼段,例如發一封信、撥一段動畫、將窗體上的數據存入數據庫…等『動作』,也組件化成為『行為』(其實上在Silverlight中有Action和Behavior這兩種實現方式可供選擇,容后說明)。
如此一來,除了設計師之外,若開發人員擅用Behavior機制也將可以讓整個Silverlight應用程序的設計更加的結構化與對象化,我們可以把常用的『動作』封裝起來重復使用,由資深程序設計師來設計Behavior,而初階或是UI的程序設計師則負責使用這些Behavior來開發程序。
在理想狀況下,Designer(設計師)或domain expert(特定領域的專家,例如財會人員、HR人員、或MIS)甚至可以完全不需要具備程序設計的觀念,只需要了解基礎的事件(Event)觀念,就可以順利的開發出一套系統,若需要實現特定的功能時,可商請developere為他們開發所需要的Behavior,designer只需要取得這些Behavior并使用即可。
理想狀況離現實很遙遠嗎?一點也不,依據我實際針對企業講授Silverlight課程的經驗來看,Behaivor幾乎擄獲所有Designer和domain expert的心,甚至我們幾乎可以期待這樣的概念衍生到Windows Form/Web Form的應用程序開發當中。
OK,說了這么多,我們還是先來看看該怎么在開發環境當中使用Behavior技術。當然,就單純的Silverlight開發人員(不管是Designer或是Developer)來說,開發環境安裝好Blend 3是最低的要求,同時當您安裝了Silverlight 3 SDK以及Blend 3 SDK、Silverlight 3 Toolkit等套件之后,您可以直接在Blend 3當中建立一個Silverlight應用程序,接著在場景中布置一個Button和一個TextBlock,并且隨意設計一個動畫。
接著,請切換到Assets頁標簽,若您有正確的安裝Blend 3 SDK,您會看到Assets頁卷標下有Behaviors選項,在列出的項目中,你會看到有一個ControlStoryboardAction:

Silverlight 3中的Behavior技術
請點選它并拖曳到Button上,然后切換到Object and Timeline頁標簽,您會發現Button控件底下多了個ControlStoryboardAction對象

Silverlight 3中的Behavior技術
接著點選該對象,切換到屬性窗口,您接著會發現,可以透過開發環境來設定ControlStoryboardAction對象的屬性(請注意不是Button的屬性,別點錯):
Silverlight 3中的Behavior技術
完成之后,請先建置(Build)此應用程序,成功后請接著執行此應用程序,您會發現在不需要寫任何程序代碼的狀況下,當使用者按下Button1(也就是Button1的Click事件觸發后),Storyboard動畫就自動被播放了。



如果您仔細觀察Action的設定窗口,會發現其實場景中任何控件(不只是Button)的任何事件(不只是Click)都可以做為特定Action的觸發條件。而每一個Actionr都代表著一種行為,而程序設計人員(developer)可以設計出各式各樣的Action,讓設計師(Designer)直接使用。

那Trigger、Action、Behavior三者之間究竟有何關系呢?
從上面的操作中我們可以知道,Action是經過程序設計師封裝好的某種行為(功能),我們可以把一些常用的代碼段,例如上面用到的『動畫撥放』、或是先前我們提過的『發一封信』、或『將窗體上的數據存入數據庫』…等『功能』整理成一個個的Action,而開發人員只需要把Action拖曳到特定的對象上即可使用。
當然,拖曳到目標對象上之后,還得要設定這個Action的相關信息,也就是該Action的屬性(如果有的話),以及該Action被觸發的時機,而這就是所謂的Trigger了。
在Silverlight中,預設的Trigger有底下幾種:
1.EventTrigger:最常用的觸發器,可選擇在控件的特定事件發生時觸發,例如Loaded、MouseLeftButtonDown、GotFocus…等。
2.TimerTrigger:可設定每n毫秒觸發一次,總共要觸發幾次或隨時間持續觸發。
3.KeyTrigger:可設定在特定按鍵被按下時觸發,可捕捉到鍵盤上的一般按鍵與功能鍵,亦可抓取Ctrl, Alt等組合控制鍵。
4.StoryboardCompletedTrigger:在特定動畫撥放完畢后觸發。
請注意,這些Trigger是配合著Action使用的,你會發現,每一個Action都可以透過Blend設定Trigger,并透過Trigger來觸發執行此Action,如此一來,我們就可以相當靈活的在場景中特定控件的特定事件發生時,來執行特定工作。
也就是說,在這個機制下,只要程序設計師預先寫好Trigger與Action,Designer就可以在完全不撰寫任何程序代碼的狀況下,來開發出一個Silverlight應用系統或網站。
我們剛才提到了Action與Trigger,那Behavior呢?難道Behavior不需要Trigger嗎?其實不是的,應該說,Behavior是內建(包含)了Trigger!!!
你會發現當場景中的某一個對象被套用了Behavior之后,不需要設定任何Trigger,該對象就會自動擁有某種功能,就好像我們剛才介紹了的MouseDragElementBehavior一樣,當該Behavior套用在某個對象上,該對象就直接支持拖曳行為了,因此,你可以將Behavior直接想象成Trigeer與Action的結合。
我們先談到這邊,下一篇則要來介紹Action的開發方式...
從前面的介紹中我們可以知道,當我們設計好了Action或Behavior之后,其實不僅是設計師(Designer)可以使用,一般開發人員在撰寫應用程序時,也可以將常用的功能封裝成了Action或Behavior,讓其他開發人員直接套用。
我們在這邊看一個簡單的例子,從這個例子當中我們也來看如何設計Action。請參考底下這個畫面:

Silverlight 3中的Behavior技術

Silverlight 3中的Behavior技術
這是一個很典型的簡單輸入畫面,使用者可以在TextBox中輸入文字,但是,當用戶點選TextBox的時候,得先把TextBox中的文字先清空后才能輸入,體貼一點的程序,會在用戶點選該TextBox時,就直接讓該TextBox中的文字變成『選取』狀態,這樣使用者就可以直接輸入了:

當然,要達成這樣的功能相當容易,只需要在TextBox的GotFocus事件中撰寫『this.TextBox1.SelectAll();』即可。但是每一個TextBox都要這樣寫,顯然很麻煩,如果可以跟剛才一樣,把一個對象(Component)直接拖曳到TextBox上,該TextBox就自動具有此功能,豈不挺好?
是的,我們緊接著就來看如何設計這樣的Action。
請先建立一個Silverlight項目(當然您也可以在現有的Silverlight項目中直接建立Action或Behavior類別,不過為Action或Behavior建立一個獨立的項目是比較理想的選擇),該項目請選擇『Silverlight Class Library』即可,接著,請在該項目中建立一個Action類別,當您在項目中選擇Add New Item時,可以找到Blend分類下的Action Template,我們建立一個名稱為『TextBoxAutoSelectAction』的Action,你會發現建立出來的類別如下:
    
public class TextBoxAutoSelectAction : TriggerAction<DependencyObject>  
{  
	public TextBoxAutoSelectAction()  
	{  
		// Insert code required on object creation below this point.  
	}  
	protected override void Invoke(object o)  
	{  
		// Insert code that defines what the Action will do when triggered/invoked.  
	}  
} 

  

請將TriggerAction調整成TargetedTriggerAction,并將<DependencyObject>改為< TextBox >。
TargetedTriggerAction是一個泛型類別,其中的<DependencyObject>則可設定為我們默認的目標對象。例如,我們現在設計的這個TextBoxAction主要的使用對象是TextBox,因此我們可以寫成『TargetedTriggerAction<TextBox>』。而繼承TargetedTriggerAction這個類別必須要實作Invoke方法,Invoke方法是該Action被觸發時,要執行的動作。
接著,我們在Invoke方法中撰寫的程序代碼如下:
    
protected override void Invoke(object o)  
{  
	TextBox TargetObject=Target;  
	TargetObject.SelectAll();  
} 

  

其中的Target是目標對象,也就是我們將來把該Action拖曳到TextBox時所指定的控件,而我們針對該Target呼叫其SelectAll()方法,來選取其中的文字。就這樣,完成了。
接著我們編譯建置該項目,然后在我們的Silverlight主項目當中,引用(Add Reference)建置好的.dll,

Silverlight 3中的Behavior技術
當項目中正確的引用了該.dll之后,就可以開始使用了,請切換到Blend 3,依照剛才我們先前介紹如何使用Action的方式,切換到Assets頁標簽下,您會看到我們剛才建立的這個Action已經出現在選項當中(如果沒有找到,請檢查一下是否有正確的引用該.dll或是該項目)。這時候,您可以直接將該Action (TextBoxAutoSelectAction)拖曳到畫面中的TextBox上:
拖曳上去之后,切換到屬性窗口,可以設定該Action的屬性:

Silverlight 3中的Behavior技術
請將Trigger中的EventName設定為GotFocus,接著將TargetName設為TextBox1,整個設定的意思是:當TextBox1的GotFocus事件被觸發時,在TextBox對象上(將TextBox1對象視為Target)執行該Action(也就是讓TextBox中的文字被選取)。
經過這樣的設定后,應用程序執行時只要用戶一點選TextBox1或是透過Tab鍵切換到TextBox1(GotFocus事件被觸發),TextBox中的文字就自動被選取了。未來我們只需要把這個Behavior拖曳到任何TextBox對象上,就可以不須撰寫任何程序代碼,在需要的時候執行此Action。
盡管這個范例似乎很簡單(只是選取文字),但重點是透過這樣的技術,開發人員可以利用此機制,或設計出各式各樣的Action,供其他Developer或Designer使用,諸如影片的控制(播放、暫停)、甚至是各種窗口或是動畫的處理(例如對象的淡入淡出…)。總括來說,Action是一個相當好用且重要的功能,值得開發人員廣泛的使用在自己的項目當中。


Silverlight 3中的Behavior技術


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人免费午夜性视频 | 九九久久国产精品大片 | 精品视频网站 | 日本亚洲天堂网 | 久久九 | 久久亚洲私人国产精品 | 播放毛片 | 魔法骑士在线观看免费完整版高清 | 亚洲精品乱码久久久久久花季 | 免费一级毛片在线观看 | 久久久婷婷一区二区三区不卡 | 亚洲一区二区三 | 午夜视频在线免费观看 | 欧美激情一区二区亚洲专区 | 一级做a免费视频 | 特级毛片网站 | 国产电影一区二区 | 丁香六月伊人 | 成人小视频在线观看免费 | 天堂中文资源在线观看 | 日本字幕在线观看 | 日韩成人中文字幕 | 国产91在线观看 | 日本黄在线观看免费播放 | 久久久久国产一区二区三区 | 亚洲精品国精品久久99热 | 成人国产激情福利久久精品 | 亚洲精品乱码久久久久久蜜桃 | 多男操一女视频 | 不卡一二三区 | 免费的色网站 | 久久AV亚洲精品一区无码 | 欧美不卡一区二区三区免 | 日日操视频 | 俄罗斯厕所偷窥视频 | 在线观看免费黄色小视频 | 性xxxx免费观看视频 | 性做久久久久免费看 | 国产一区二区精品丝袜 | 日韩一区二区福利视频 | 九九精品视频在线播放 |