淺析WPF與Silverlight的關(guān)鍵區(qū)別
Silverlight剛誕生時(shí),很多人只是簡(jiǎn)單的理解它為Flash的競(jìng)爭(zhēng)對(duì)手。但是隨著微軟的進(jìn)一步工作,Silverlight的應(yīng)用范圍越來越廣泛,甚至很多人將它與WPF混為一談。本文將為大家細(xì)細(xì)道來。
當(dāng)WPF和Silverlight越來越受到.NET開發(fā)人員重視的時(shí)候,兩者間的界限也越來越模糊?;仡櫫?,Wintellect發(fā)布了鮮為人知但極其重要的“微軟WPF和Silverlight之異同白皮書”。我們建議GUI開發(fā)人員要通讀全部69頁,我們會(huì)列出主要的觀點(diǎn)及其對(duì)相關(guān)業(yè)務(wù)范圍開發(fā)人員的影響。
依賴關(guān)系屬性是兩個(gè)平臺(tái)的重要組成部分,使用PropertyMetadata可代替普通字段來保存屬性。Silverlight僅提供了該類,而WPF卻有若干子類型可用。
UIPropertyMetadata添加了一個(gè)標(biāo)識(shí)符,用于決定“在使用了元數(shù)據(jù)實(shí)例的地方,是否應(yīng)該禁播依賴關(guān)系屬性的動(dòng)畫”
FrameworkPropertyMetadata添加一個(gè)標(biāo)識(shí)符來指示影響管道的那些屬性,包括控制管理、測(cè)量和呈現(xiàn)。它也可用于指示屬性是否允許數(shù)據(jù)綁定以及默認(rèn)的類型。由于Silverlight不支持該類,因此所有的數(shù)據(jù)綁定在默認(rèn)情況下都是單向的。
Silverlight不支持隧道事件。兩個(gè)平臺(tái)都支持Direct事件和Bubbling事件。
WPF支持多種類型的觸發(fā)器。一個(gè)簡(jiǎn)單的觸發(fā)器附加到依賴關(guān)系屬性后,當(dāng)觸發(fā)器條件滿足的時(shí)候便會(huì)自動(dòng)修改樣式。除了簡(jiǎn)單觸發(fā)器以外,WPF也支持可響應(yīng)路由事件或使用數(shù)據(jù)綁定的觸發(fā)器。
Silverlight使用視覺狀態(tài)管理器代替觸發(fā)器。WPF當(dāng)前并不提供該技術(shù),但會(huì)在WPF 4.0中添加。
Silverlight僅支持若干標(biāo)記擴(kuò)展。除了通用的StaticResource、Binding和TemplateBinding擴(kuò)展以外,WPF還添加了DynamicResource、RelativeSource、x:Type、x:Static和x:Array。
有很多鍵盤和鼠標(biāo)事件僅在WPF中可用。由于為數(shù)眾多的關(guān)系,我們稍后會(huì)列出完整列表。
關(guān)于UIElement類和IInputElement接口。當(dāng)某個(gè)控件被禁用的時(shí)候,WPF使用它們來禁用所有的子控件。Silverlight不提供這種功能,所以開發(fā)人員不得不手動(dòng)遍歷控件樹。
在通信方面,Silverlight僅限于BasicHttpBinding和PollingDuplexHttpBinding。當(dāng)然,WPF支持所有的綁定。
***,打印功能在兩者之間也完全不同。WPF可直接打印可視化樹而Silverlight則依賴瀏覽器實(shí)現(xiàn)。