我读到,当样式不正确时,ListBox将失去其虚拟化。作为notacat 在这个问题中的回答,他的解决方案是可以的。
我意识到每当我将 ItemsPresenter 放入另一个容器中时,例如Grid, Border, ...
<ControlTemplate TargetType="ListBox">
<ScrollViewer x:Name="ScrollViewer"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Foreground="{TemplateBinding Foreground}"
Padding="{TemplateBinding Padding}">
<StackPanel>
<TextBlock Text="{TemplateBinding MyText}" />
<ItemsPresenter/>
</StackPanel>
</ScrollViewer>
</ControlTemplate>
ListBox将立即失去其虚拟化。但我确实想放置一个TextBlockbefore ItemsPresenter,而ScrollViewer只接受 1 个子元素。
如何处理?
更新:我看到这篇文章,Derek Lakin所做的是将其放置TextBlock到ScrollViewer模板中,但如何将其TextBlock放入ScrollContentPresenter?
P/S:我确实设置VirtualizingStackPanel了ItemsPanel我的ListBox.