2

我读到,当样式不正确时,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所做的是将其放置TextBlockScrollViewer模板中,但如何将其TextBlock放入ScrollContentPresenter

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

4

1 回答 1

2

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

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

于 2012-12-21T10:52:19.950 回答