Dot-Net
在 Silverlight 中工作時,您錯過了哪些 .Net/WPF 功能?[關閉]
我最近開始使用 Silverlight,並立即註意到 Silverlight BCL 與完整的 .Net 和 WPF 之間的區別。對於其中一些人,我發現其他開發人員在網上發布了很好的解決方案,而其他人則更複雜。您對 Silverlight 類庫中缺少哪些功能/類感到驚訝/失望,您採取了哪些措施來解決它們?
我的一些是:
- 沒有事件觸發的動畫- 我創建了一個帶有靜態方法的輔助類,用於將我用過的每種類型的動畫附加到共享庫中的情節提要上,並在應用程序級別創建帶有靜態方法的類,以便將它們全部放在一起如果在 WPF 中工作,則在 XAML 中。到目前為止,這是一個很好的解決方案,可以讓我的動畫井井有條,並讓我的事件處理程序中的邏輯脫離。
- ScrollViewer 不支持滑鼠滾輪- Adam Cooper 創建了一個出色的類庫,添加了此功能,在任何 Silverlight 項目中都需要最少的程式碼來實現。他的網站目前似乎已關閉,因此這裡有一個指向 Tim Heuer 部落格的連結,該連結對其進行了解釋和連結(因此,當他的網站重新上線時,該連結將可用)。 在 Silverlight 中為 ScrollViewer 添加滑鼠滾輪支持
SortedDictionary<T, K>不見了。 我發現這篇文章包含一個實現,但我自己並沒有最終使用它。- ResourceDictionary.MergedDictionaries 不可用- 再次…找到實現此並發布原始碼的人,但它似乎有點複雜。我可能會完成它一點點,但還沒有這樣做。 Silverlight 中的合併字典
- ZIndex 附加屬性僅在 Canvas 對像上可用。 我在 SO 上將此作為一個問題發佈在這裡,如果需要的話,有人提出了一個很好的建議,將我的容器包裝在一個集合中。感覺有點草率,但你必須做你必須做的。我的容器嵌套了三層,因此我可能需要將它們全部變形到 Canvas 對像中,並為每個事件設置三次 Canvas.ZIndex。醜陋如罪,但如果這是唯一的方法,那就這樣吧。
我有興趣了解更有經驗的 Silverlight 開發人員遇到的其他常見問題以及您為解決這些問題所做的工作。
我該從哪裡開始?:)
- 沒有多重綁定
- 沒有ElementName = 綁定
- TemplateBinding只能引用直接屬性,不能附加 DP
- 沒有RelativeSource綁定
- 沒有綁定到子屬性- 例如,
{Binding Path=Foo.Bar[0].Baz}- 無法訂閱任意依賴屬性上的更改事件- 類作者必須顯式定義事件(在大多數情況下,SL 控制項中實際上只有一個或兩個屬性)
- 可視狀態管理器要求控制項作者在編寫控制項時了解所有可樣式化的狀態,這完全打破了 WPF 提倡的“通過樣式/模板進行擴展,而不是繼承”的故事
- 沒有裝飾品
- 沒有導航
- 沒有依賴屬性繼承
- 對外部 ResourceDictionaries/合併字典沒有/糟糕的支持
- 驗證故事很爛(在 WPF 中只是稍微好一點)
- 印刷
<Setter .. Value="{Binding ...}" />不支持最重要的是,許多方法簽名無緣無故地改變了。例如,IIRC,Dispatcher.Invoke 的重載是不同的,而不是 SL 只是忽略它還不能處理的參數。或者作為另一個範例,WPF 中的 ObservableCollection 可以引發 Add、Remove、Replace 和 Move 事件 - 在 SL 中它只是前三個。
由於我編寫的程式碼可以在兩個平台上工作,因此程式碼最終會被策略模式和#ifdefs 所淹沒。感覺又像 C++ 了 :-)