2009-06-24 71 views
1

我使用WPF和C#創建的數以千計的控制的最佳途徑。是什麼在滾動區域用WPF

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

問題是,當他們都創建它的作品真的很慢。

現在的問題是 - 是否有可能同時擁有如此多的控件而沒有滯後,我應該在什麼方向尋找解決方案?我想保存使用模板,數據綁定和簡單事件處理(如鼠標點擊)的功能。

P.S.我想的東西很多的(唯一的幾何渲染,不同的基類等),但目前這似乎爲我工作(我還沒有嘗試過),唯一的方法是創建只有那些適應當前視口的控制和更新滾動控件列表。

P.P.S我知道,有3.5 SP1的機制是在ListBox中使用時,列表項滾動過程中重複使用,但這種方法可能,因爲所有這些項目都是不同類型的不能在此處使用。

非常感謝。

回答

1

首先 - 我會質疑設計這種類型的要求的理由。有什麼都成千上萬的控制,除了某種類型的網格或列表(他們都是恆定的,沒有改變,所以列表式的方法將正常工作)將是令人難以置信的混亂給用戶。你基本上迫使一個不明顯的,不斷變化的界面,其中有數千個項目。

話雖這麼說...

PPS我知道,有3.5 SP1的機制是在ListBox中使用時,列表項滾動過程中重複使用,但這種方法不能在這裏使用,因爲所有這些項目是不同的類型。

這實際上可能是您最好的方法。這應該很好 - 雖然它不會像列表框機制那麼簡單。您始終可以預先創建控件 - 只需根據需要創建足夠的每種控件以填充當前容器,並且在您滾動時,將適當的控件重新分配到適當的位置。

如果您真的需要數千個控件,這很可能是您最好的選擇。

+0

有人告訴我,並已經看到了自己說的控制與數據綁定的數量較多數量較少各地優於其他方式。 FrameworkUIElement的*非常昂貴。 – user7116 2009-06-24 16:49:16

+0

@sixlettervariables:這就是我在這裏所說的 - 最好是有一個較少的總控件數量,並在滾動時重新分配(重用)數據綁定,就像列表框一樣。他只需要在滾動期間額外重新定位/佈局。 – 2009-06-24 16:58:02

2

事實上,你希望〜3000控制在一個單一的屏幕上是一個問題,它通常是一個標誌,你是從錯誤的角度接近你的GUI。我對WPF並不是非常有經驗,但是我的WinForms知識告訴我有1000多個控件實例只是在尋求麻煩。這是ListBoxes,DataGrids和其他表格/列表格式控件的設計目的。

我給了一個類似的回答類似的問題在這裏:Super Slow C# Custom Control

也許如果您解釋一下什麼是你想要做的,而不是你正試圖在這裏實現有人可以把你在正確的方向有什麼解決辦法。