Как сохранить виртуализацию, когда стиль ControlTemplate ListBox?
Я читал, что при неправильной укладке, 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
потеряет свою виртуализацию сразу. Но я хочу разместить TextBlock
до ItemsPresenter
, и ScrollViewer принимает только 1 дочерний элемент.
Как с этим бороться?
ОБНОВЛЕНИЕ: я вижу этот пост, который Дерек Лэйкин делает, чтобы поместить это TextBlock
к ScrollViewer
шаблон, но как это можно разместить TextBlock
в ScrollContentPresenter
?
P / S: я устанавливаю VirtualizingStackPanel
как ItemsPanel
для меня ListBox
,
1 ответ
Вы создаете шаблон элемента для списка, но важно, чтобы ItemPresenter был прямым потомком средства просмотра прокрутки. Посетите http://msdn.microsoft.com/en-us/library/ms754242.aspx для получения дополнительной информации о том, как шаблонизировать список. Я также нашел эту статью действительно полезной.
Если itempresenter не может быть прямым потомком, вы должны дать ItemsPresenter имя ItemsPresenter.