2011-11-01 51 views
8

當我想創建響應式用戶界面時,我只想提供一些提示。響應式UI技巧

我知道如何使用:

Dispatcher 
Task 
BackgroundWorker 
Threads 

我找了更先進的技巧,像結合的提示...當我有我的用戶界面,需要更新50+控制。

PriorityBinding 
Populating ComboBoxes 
Populating ListBoxes, ListViews 

時在後臺處理數據...... 最佳做法也許當談到長期運行proccess。

我還能做些什麼來使我的用戶界面100%響應。

回答

16
  1. FastObservableCollection

  2. 操縱PresentationSource

  3. 通過使用 AsQueryable()比單線程的數據源的動態過濾和線程不可知CollectionView使用在多個線程PLinq或LINQ。

  4. 成衣Gifs在動畫

  5. 非虛擬化面板的虛擬化技術的像畫布

  6. 遞延滾動

  7. 爲動畫Trigger.Exnter \退出動作。

  8. BeginStoryboard.HandoffBehavior = 「撰寫」

  9. 使用硬件對軟件加速。

  10. 避免WindowStyle=NoneAllowTransparency=trueBackground=TransparentTileMode

  11. 配置RenderOptions.BitmpaScalingMode作爲低質量和使能緩存。啓用PresentationFontCache Windows服務。

  12. 使用Staticresources超過Dynamicresources

  13. 避免可繼承依賴屬性。還要避免在財產變更回調中進行繁重的操作。

  14. 使用Freezable筆刷。避免x:Name/Namescoping/BindingColor propertys他們一直凍結。

  15. 設置邊框的背景,如果它封裝視覺比設置視覺的背景。類似的是,如果您已將Brush設置爲視覺背景,則指定Brush.Opacity而不是Visual.Opacity

  16. 值轉換器必須有最小代碼。在適用的地方使用Binding.IsAsyncPriorityBinding

  17. 默認情況下使用ExpandersIsExpanded=False

  18. CompositionTarget.Rendering在每個渲染週期發生火災,因此只有在需要時才能使用。在任何機會上都可以將其卸下。

  19. WPF DataGrid應避免大量使用組合框列和編輯模板列,作爲combobx模板嘗試加載所選的值,並通過實際從每個組合框和模板列的項目源搜索用它顯示部件路徑與高度可觀察的集合一起使用時會泄漏。

  20. 使用WPF Extedned基於Tooklit的着色器效果和新的像素着色器API ,如Blur,Shadow。

還有更多...

+0

非常有幫助。 Thx天使。 =) – Willem

+0

最終禁用所有最好的圖形,並使應用程序看起來像舊式贏32應用程序:) –

0

在單個用戶界面上的50多個控件聽起來像是由編碼器設計的,優化代碼可能會在一段時間內抵消實際問題。最好的辦法是將您的功能分離到不同的屏幕上或隱藏菜單後面的較少使用的信息。

1

我總是發現延遲加載非常有幫助的,以防止在被加載一次大的數據量,這是大多數的啓動時間的推移處理大量數據的時候。將您的記錄綁定到virtualized項目控件,以最大限度地減少內存佔用(顯然,WPF是您對內存中所需內容的判斷)。

但說實話:馬丁是相當正確的... 50+的數據綁定控件,...男人,這是刻着地獄;-)

而且你的追求100%的反應,我想,需要進一步說明。據我的理解,應用程序可以是響應或不響應(以用戶輸入/產生輸出vs卡住無所事事)。你的目標是最好的表現嗎?或者它是一個你正在面臨的rowlocking場景(讓用戶在某些記錄上執行長時間任務時編輯其他記錄)?

我認爲AngelWPF提到的一些東西可以在this neat article的優先級綁定中找到。

+0

是的,50+控件似乎分配,但它們都同樣重要。花費時間最長的部分是組合對象上的項目源的綁定...但Form(View)的初始加載需要很長時間。我希望快速的形式,然後其餘的綁定可以發生或類似的事情。當用戶點擊需要很長時間才能打開的下拉菜單時,由於海量數據...因此,我有點卡住了 – Willem

+1

好的,如果有任何幫助,請查看本文中的信息: http://blogs.msdn.com/b/jgoldb/archive/2007/10/10/improving-wpf-applications-startup-time.aspx。 –