我有一個包含大量組件的頁面,需要幾秒鐘才能加載。WPF Toolkit DataGrid呈現不正確的列寬度
我的問題是,該頁面在組件已計算其列寬並且用戶可以在屏幕上看到渲染之前呈現頁面。
我建立一個非常簡單的例子:本數據網格有3列,第一列具有Width="*"
,另一列具有一個固定的寬度。 與固定寬度的列從一開始就正確地呈現,但星形柱呈現與20
的寬度之後的第二的數據網格計算星列的正確寬度並呈現網格正確:
我的例子XAML:
<ScrollViewer>
<Controls:DataGrid Name="mainTable" AutoGenerateColumns="False">
<Controls:DataGrid.Columns>
<Controls:DataGridTemplateColumn Header="col 0" Width="*">
<Controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Col0}" />
</DataTemplate>
</Controls:DataGridTemplateColumn.CellTemplate>
</Controls:DataGridTemplateColumn>
<Controls:DataGridTextColumn Header="col 1" Binding="{Binding Col1}" Width="150" />
<Controls:DataGridTextColumn Header="col 2" Binding="{Binding Col2}" Width="150" />
</Controls:DataGrid.Columns>
</Controls:DataGrid>
而後面的代碼:
public MainWindow()
{
InitializeComponent();
var rows = new List<RowObj>();
for (int i = 0; i < 5000; i++)
{
rows.Add(new RowObj
{
Col0 = "col0," + i,
Col1 = "col1," + i,
Col2 = "col2," + i,
Col3 = "col3," + i,
Col4 = "col4," + i,
});
}
mainTable.ItemsSource = rows;
}
作爲一個說明:我用WpfToolkit(最新的版本,從2010年)和.NET 3.5 我不能切換到WPF4組件。
任何想法如何解決加載問題?
嘗試之前'的InitializeComponent移動行列表生成的邏輯()'。 –
@RohitVats:沒有幫助,它在大多數情況下實際上會拋出一個異常,因爲這些控件還沒有創建。實際的渲染不會在綁定時發生,因此設置數據實際上可以在init或加載事件中以相同的結果完成。 –
我的意思是隻移動列表部分而不是賦值 - 'mainTable.ItemsSource = rows;'。這隻能在'InitializeComponent()'之下。 –