【问题标题】:How to keep Virtualizing when style ControlTemplate of ListBox?ListBox的ControlTemplate样式时如何保持虚拟化?
【发布时间】:2012-12-08 22:16:18
【问题描述】:

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

我意识到每当我将 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 将立即失去其虚拟化。但我确实想在ItemsPresenter 之前放置一个TextBlock,并且ScrollViewer 只接受1 个子元素。

如何处理?

更新: 我看到了这个 postDerek Lakin 所做的是将 TextBlock 放置到 ScrollViewer 模板中,但是如何将 TextBlock 放置在 ScrollContentPresenter 中?

P/S:我确实为我的ListBox 设置了VirtualizingStackPanelItemsPanel

【问题讨论】:

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


    【解决方案1】:

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

    如果 itempresenter 不能是直接子级,则必须给 ItemsPresenter 命名,ItemsPresenter。

    【讨论】:

    • 你是对的。我按照您指出的文章进行操作,但是当我设置 但它不起作用
    • 是的,这里是 XAML pastebin.com/6BSfeyqc,这里是代码 pastebin.com/yxwcFbGX
    • 您关于命名 ItemsPresenter 的建议可能对发帖者没有帮助,但对我有所帮助,所以谢谢,谢谢!!!在命名之前,我无法虚拟化 ItemsControl 以使其正常工作,即使我的 ControlTemplate 是非常基本的 格式。在命名 ItemsPresenter 之后,它就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多