我读到,如果样式不正确,ListBox
将失去其虚拟化。作为notacat's answer in this question,他的解决方案没问题。
我知道每当我将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
将立即失去其虚拟化。但我确实想在TextBlock
之前放置ItemsPresenter
,而 ScrollViewer 只接受1个子元素。
如何处理?
更新:
我看到这个post,其中 Derek Lakin 将TextBlock
放置到ScrollViewer
模板,但如何将TextBlock
放入ScrollContentPresenter
{1}}?
P / S :我为VirtualizingStackPanel
设置ItemsPanel
为ListBox
。
答案 0 :(得分:2)
您正在为列表框创建项目模板,但重要的是ItemPresenter是滚动查看器的直接子项。 有关如何模板列表框的详细信息,请查看http://msdn.microsoft.com/en-us/library/ms754242.aspx。我还发现this article非常有帮助。
如果itempresenter不能是直接子项,则必须为ItemsPresenter指定名称ItemsPresenter。