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