Я пытаюсь создать список прокрутки довольно большого textblocks. Я хочу там быть вертикальной полосой прокрутки, чтобы показать им всем, и если они переполняют определенного размера, я хочу, чтобы они отобразили замещающий знак. У меня на самом деле есть вся эта довольно хорошая работа.
У меня есть следующая Silverlight XAML:
<Grid x:Name="LayoutRoot" MaxWidth="500" MinWidth="100"
MaxHeight="500" MinHeight="100">
<Grid.DataContext>
<app:MainPageViewModel/>
</Grid.DataContext>
<ScrollViewer>
<ItemsControl ItemsSource="{Binding TextItems}" Margin="0,20,0,20">
<ItemsControl.ItemTemplate><DataTemplate>
<Border MaxHeight="175" Margin="0,0,0,18" CornerRadius="5">
<TextBlock Margin="2" TextTrimming="WordEllipsis"
TextWrapping="Wrap" Text="{Binding}"/>
</Border>
</DataTemplate></ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
Моя проблема состоит в том, что это расположение не использует виртуализацию UI, такой как с VirtualizingStackPanel. Таким образом, это довольно медленно. Что лучший способ состоит в том, чтобы получить виртуализацию UI в это расположение? Я попробовал приблизительно полдюжину различных путей, и ничто не разработало все настолько хорошо.
Мне удалось получить эту работу в ListBox, потому что это, кажется, поддерживает виртуализацию из поля. Однако я предпочел бы использовать ItemsControl, поскольку я не хочу эти вещи можно выбрать, и я не хочу моделирование, которое приходит с ListBox.
Это в Silverlight 4.
Есть несколько вещей, которые вам нужно сделать, чтобы это сработало.
Вот простейший пример, который я мог придумать для этой работы:
<ItemsControl ItemsSource="{Binding TextItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border>
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>