ListBox的样式ControlTemplate时如何保持虚拟化?

时间:2012-12-21 10:27:07

标签: windows-phone-7 listbox scrollviewer virtualizingstackpanel itemspresenter

我读到,如果样式不正确,ListBox将失去其虚拟化。作为notacat's answer in this question,他的解决方案没问题。

我知道每当我将ItemsPresenter放入另一个容器时,例如GridBorder,...

<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设置ItemsPanelListBox

1 个答案:

答案 0 :(得分:2)

您正在为列表框创建项目模板,但重要的是ItemPresenter是滚动查看器的直接子项。 有关如何模板列表框的详细信息,请查看http://msdn.microsoft.com/en-us/library/ms754242.aspx。我还发现this article非常有帮助。

如果itempresenter不能是直接子项,则必须为ItemsPresenter指定名称ItemsPresenter。