我有一個WPF用戶控件,它綁定到DataTable
並生成CheckBox
和DataTable
中的每一行的蒙版EditBox
。我的表單上有幾個這種控件的實例。要生成的總數爲CheckBox
超過200.我看到一些渲染性能問題。表單會立即加載所有靜態控件(文本框,刪除下降),然後幾秒鐘後出現CheckBox
es。WPF渲染性能
有什麼想法?
感謝
我有一個WPF用戶控件,它綁定到DataTable
並生成CheckBox
和DataTable
中的每一行的蒙版EditBox
。我的表單上有幾個這種控件的實例。要生成的總數爲CheckBox
超過200.我看到一些渲染性能問題。表單會立即加載所有靜態控件(文本框,刪除下降),然後幾秒鐘後出現CheckBox
es。WPF渲染性能
有什麼想法?
感謝
除非所有的200個項目都顯示在屏幕上,你應該使用某種形式的虛擬界面的,只有在可見的項目創建可視化樹。這將大大提高你的表現。
什麼是「生成」複選框?您應該使用ItemsControl(或子類)並將代表複選框的數據綁定到它。假如你這樣做,那麼你需要做的是獲取ItemsControl中使用「虛擬化」通過像這樣應用VirtualizingStackPanel.IsVirtualizing屬性ItemsControl的:
<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >
您可能還需要打開「集裝箱回收「,這也有助於表現。這也與附加屬性來完成:
<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >
這是正確的答案:) – Anvaka
太多的複選框肯定花費了很多,如果你看一下基本控制模板,他們也充滿了很多UI元素的。
我會建議如果你可以把你的用戶界面分成標籤或手風琴,這樣會在一個屏幕上產生較少的可見項目,以及它可以幫助用戶輕鬆快速地導航到項目。
VirtualizingStackPanel將有所幫助,但如果綁定不正確,則可能會導致不可預知的結果。
自定義控件模板: 您也可以用最少的UI元素創建自己的自定義模板複選框,像簡單的矩形填充不同顏色的財產器isChecked觸發。這將消除一些動畫等,可以確保您的渲染性能。我相信CheckBox在動畫UI方面是最不重要的。
如果您確定要使用「文本」作爲內容,那麼只需使用矩形創建模板以顯示填充/空值並將帶有模板綁定的TextBlock放入內容即可。
嘗試給您的複選框給定固定的寬度/高度,無論何時您修改控件/容器的高度/寬度,它都會成爲佈局管理器呈現它們的eaiser,而不是繼續計算和調整項目。
我使用滾動查看器來顯示窗體,因爲機器具有不同的屏幕尺寸。滾動查看器是否可以與虛擬佈局一起工作,如果可以,您可以指向我的某些文檔嗎? 謝謝 – unclepaul84
是的,他們會。嘗試查找VirtualizingStackPanel,它是最常用的之一。您可以將其與itemcontrol一起使用 - 並將滾動查看器添加到模板。 – Egor
你說得對,Franci。 – Anvaka