问题:在可滚动区域中显示大量数据会带来糟糕的性能和/或用户体验。
尝试:基本上在 ListBox 中设置一个 DataTemplate 以显示填充数据的网格,其中 VirtualizationMode 设置为 Recycle 并在 ListBox 本身上设置了固定高度。类似于下面的示例。
<ListBox x:Name="Items"
TabNavigation="Once"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Height="500">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,5">
<HyperlinkButton Content="Action" Margin="5"/>
<ContentControl
cal:View.Model="{Binding}"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ContentControl 将从另一个视图引入一个标准,该标准<Grid>
格式化由大约 20 个静态和 20 个数据绑定 TextBlocks 组成的填充项目的整体布局。
这工作正常,并将初始负载减半。但是,现在的问题是我需要高度不是固定大小的能力,因此它占用了其父级中的可用空间,甚至可以调整大小。感谢@DanFox
我发现您必须以一种或另一种形式修复高度才能调用虚拟化,否则 RenderEngine 只是认为它有无限的空间。
问题是:有没有更好的方法来做到这一点,或者我怎样才能至少修复当前的技术以实现更好的用户体验?我可能会生成数百个这样的项目,因此我需要虚拟化的性能增强。但是,我还需要允许用户调整窗口大小并保留有效滚动的能力。
非常感谢任何见解,谢谢,节日快乐!