2009-10-28 132 views
0

我有一個WPF用戶控件,它綁定到DataTable並生成CheckBoxDataTable中的每一行的蒙版EditBox。我的表單上有幾個這種控件的實例。要生成的總數爲CheckBox超過200.我看到一些渲染性能問題。表單會立即加載所有靜態控件(文本框,刪除下降),然後幾秒鐘後出現CheckBox es。WPF渲染性能

有什麼想法?

感謝

回答

2

除非所有的200個項目都顯示在屏幕上,你應該使用某種形式的虛擬界面的,只有在可見的項目創建可視化樹。這將大大提高你的表現。

+0

我使用滾動查看器來顯示窗體,因爲機器具有不同的屏幕尺寸。滾動查看器是否可以與虛擬佈局一起工作,如果可以,您可以指向我的某些文檔嗎? 謝謝 – unclepaul84

+0

是的,他們會。嘗試查找VirtualizingStackPanel,它是最常用的之一。您可以將其與itemcontrol一起使用 - 並將滾動查看器添加到模板。 – Egor

+0

你說得對,Franci。 – Anvaka

2

什麼是「生成」複選框?您應該使用ItemsControl(或子類)並將代表複選框的數據綁定到它。假如你這樣做,那麼你需要做的是獲取ItemsControl中使用「虛擬化」通過像這樣應用VirtualizingStackPanel.IsVirtualizing屬性ItemsControl的:

<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... > 

您可能還需要打開「集裝箱回收「,這也有助於表現。這也與附加屬性來完成:

<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... > 
+0

這是正確的答案:) – Anvaka

0

太多的複選框肯定花費了很多,如果你看一下基本控制模板,他們也充滿了很多UI元素的。

我會建議如果你可以把你的用戶界面分成標籤或手風琴,這樣會在一個屏幕上產生較少的可見項目,以及它可以幫助用戶輕鬆快速地導航到項目。

VirtualizingStackPanel將有所幫助,但如果綁定不正確,則可能會導致不可預知的結果。

  1. 自定義控件模板: 您也可以用最少的UI元素創建自己的自定義模板複選框,像簡單的矩形填充不同顏色的財產器isChecked觸發。這將消除一些動畫等,可以確保您的渲染性能。我相信CheckBox在動畫UI方面是最不重要的。

  2. 如果您確定要使用「文本」作爲內容,那麼只需使用矩形創建模板以顯示填充/空值並將帶有模板綁定的TextBlock放入內容即可。

  3. 嘗試給您的複選框給定固定的寬度/高度,無論何時您修改控件/容器的高度/寬度,它都會成爲佈局管理器呈現它們的eaiser,而不是繼續計算和調整項目。