簡體   English   中英

使用WPF在可滾動區域中創建數千個控件的最佳方法是什么

[英]What's the best way of creation of thousands of controls in scrollable area using WPF

我正在使用WPF和C#。

我有個問題。 我需要在滾動區域中創建很多可綁定的模板化控件(它們都是不同的類型)。 例如1000個文本框,1000個下拉列表和1000個復選框。

問題是當它們全部創建后,它的工作速度真的很慢。

問題是-是否可以同時有這么多控件而不會出現滯后,我應該在哪個方向上尋找解決方案? 我想保留使用模板,數據綁定和簡單事件處理(如單擊鼠標)的功能。

PS我嘗試了很多事情(僅渲染幾何圖形,使用不同的基類等),但目前看來對我有用的唯一方法(我尚未嘗試過)是僅創建適合當前視口的控件並在滾動時更新此控件列表。

PPS我知道3.5 SP1中有一種機制,當在滾動過程中重用列表項時,ListBox中會使用這種機制,但由於所有這些項都是不同類型,因此此處無法使用這種方法。

非常感謝。

您希望在單個屏幕上控制約3000個事實,這通常是一個問題,這通常表明您從錯誤的角度接近GUI。 我對WPF並不是很有經驗,但是我的WinForms知識告訴我1000多個控件實例只是在自找麻煩。 這就是ListBoxes,DataGrid和其他表格/列表格式控件的設計目的。

我對這里的類似問題給出了類似的答案: 超級慢C#自定義控件

也許如果您解釋您要做什么而不是嘗試使用哪種解決方案來實施此處的人員,則可以向正確的方向發展。

首先-我會質疑這種需求設計的原理。 除了網格或某種列表(它們都是恆定的,不會改變,因此列表樣式的方法可以正常工作)之外,在任何事物中都有成千上萬的控件將給您的用戶帶來極大的困擾。 您基本上是在強迫一個不明顯的,不斷變化的界面,其中包含數千個項目。

話雖如此...

PPS我知道3.5 SP1中有一種機制,當在滾動過程中重用列表項時,ListBox中會使用這種機制,但由於所有這些項都是不同類型,因此此處無法使用這種方法。

這實際上可能是您最好的方法。 這應該可以正常工作-盡管它不會像列表框機制那樣簡單。 您始終可以預先創建控件-只需根據需要創建足夠多的每種控件類型即可填充當前容器,並在滾動時將相應的控件重新分配到相應的位置。

如果您確實需要成千上萬的控件,那么這很可能是您的最佳選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM