我有3个内容项,两个DataGrid
和一个StackPanel
在WPF应用程序中都需要一起滚动。只要我只有一个很小的数据集,一切就可以使用ScrollViewer
正常运行,但是当我得到150行的500行数据时,在绘制屏幕之前它会滞后8秒钟。读完以下内容后:Unreasonable WPF DataGrid Loading Time我禁用了ScrollViewer
,它只用了2.5秒就加载完毕。
<ScrollViewer CanContentScroll="True"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition Height="22" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<DataGrid x:Name="DataGridViewHeader" CellEditEnding="ColumnNameUpdate" Grid.Row="0" HeadersVisibility="None" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" ItemsSource="{Binding}" CurrentCellChanged="DataGridCellChange" Grid.Column="0" DataGridCell.Selected="DataGrid_GotFocus" />
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" Name="ComboBoxPanel" Grid.Row="1" Margin="0,0,0,0" HorizontalAlignment="Left" >
</StackPanel>
<DataGrid x:Name="DataGridView" Grid.Row="2" HeadersVisibility="None" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" ItemsSource="{Binding}" CurrentCellChanged="DataGridCellChange" Grid.Column="0"/>
</Grid>
</ScrollViewer>
麻烦的是,ScrollViewer
提供了以下布局,允许我重命名顶部的列,在第二行中使用下拉菜单选择该列的DataType
,然后显示数据。拥有150根色谱柱,它们必须全部排成一列,但是性能受到很大的打击。
虽然我意识到ScrollViewer
是一个简单的解决方案,但是在考虑性能时是否有更好的方法呢?
答案 0 :(得分:0)
删除ScrollViewer并添加
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode = "recycling"
EnableColumnVirtualization = "true"
EnableRowVirtualization = "true"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
MaxWidth="2560" MaxHeight="1600"