對於個人項目,我需要基於可變大小數組的內容動態填充網格。我沿着下面的代碼使用代碼來做到這一點,並且它運行良好,除了當數組變大(如200 x 200或更多)時,它變得很慢(20+秒以上)。它看起來像實例化按鈕很快,但添加到網格很慢。
我做錯了什麼?有什麼我可以做的,以加快使用常規的WPF網格的過程?我應該看看另一種控制嗎?在此先感謝您的任何建議。如何加速向WPF網格添加控件?
int columns=200;
int rows=200;
var width = new GridLength(30);
var height = new GridLength(25);
for (int column = 0; column < columns; column++)
{
var columnDefinition = new ColumnDefinition();
columnDefinition.Width = width;
this.TestGrid.ColumnDefinitions.Add(columnDefinition);
}
for (int row = 0; row < rows; row++)
{
var rowDefinition = new RowDefinition();
rowDefinition.Height = height;
this.TestGrid.RowDefinitions.Add(rowDefinition);
}
for (int column = 0; column < columns; column++)
{
for (int row = 0; row < rows; row++)
{
var button = new Button();
button.Content = row.ToString() + ", " + column.ToString();
Grid.SetRow(button, row);
Grid.SetColumn(button, column);
this.TestGrid.Children.Add(button);
}
}
這也是我所害怕的,但我希望也許有一個我不知道的魔術......我並沒有建立世界錦標賽掃雷人板,但基本上覆制了Excel用戶界面。 – Mathias 2009-09-28 23:38:25
謝謝!你的回答讓我重新思考這個問題,並意識到我可以通過改變我的設計完全避免這個問題。 – Mathias 2009-09-30 02:26:11
另外請確保您查看行和列虛擬化。這是所有關於保持創建的WPF元素的數量低,即使當你綁定到很多元素。 – 2010-04-23 17:27:15