Как поддерживать виртуализацию в WPF ListBox при шаблонировании выбранного элемента - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть ListBox с 1000 элементами, и когда выбран конкретный элемент, элемент расширяется (как я выбрал шаблон ListBox Selected Item), предоставляя пользователю дополнительную информацию.

Проблема в том, что когда я щелкаю на ListBox, вместо расширения выбранного элемента, ListBox расширяет какой-то другой элемент.

Я смог решить эту проблему, установив ScrollViewer.CanContentScroll="False", но он удалил виртуализацию, из-за чего элемент управления стал работать очень медленно.Поправьте меня, если я ошибаюсь, шаблон ListBoxItem, который эффективно изменяет высоту элемента, также удалит виртуализацию.

Вот xaml для ListBox:

 <ListBox x:Name="AllPortfoliosList" Grid.Column="0" Grid.Row="0" ClipToBounds="False" Style="{StaticResource LooklessListBox}"   
     ItemsSource="{Binding AllPortfolioInfos}" 
     ScrollViewer.CanContentScroll="False"                                            
     ItemContainerStyle="{StaticResource RosterListItem}" />

RosterListItem:

<Style x:Key="RosterListItem" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="Template" Value="{DynamicResource item_rosterDetails}" />
        <Setter Property="HorizontalContentAlignment" Value="Left" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="Cursor" Value="Hand" />        
        <Setter Property="Padding" Value="0,0,0,0" />
        <Setter Property="ClipToBounds" Value="False" />
        <Style.Triggers>
            <Trigger Property="Selector.IsSelected" Value="True">
                <Setter Property="Template" Value="{DynamicResource Item_watchDetails}" />
            </Trigger>
        </Style.Triggers>
    </Style>

Item_watchDetails:

<ControlTemplate x:Key="Item_watchDetails">
        <Grid x:Name="grid_watch_details" HorizontalAlignment="Stretch" VerticalAlignment="Top"  SnapsToDevicePixels="True">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />   
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>    
...
</ControlTemplate>

Как мне решить эту проблемугде ListBox все еще поддерживает виртуализацию и включает шаблоны элементов с помощью прокрутки

...