Relativity
Relativity

Reputation: 6868

UI Virtualization stop when I use template for listview

I have a control extended from listview in WPF. If I override "Template" using a custom template, the UI virtualization is no longer exists.

Could somebody help me to have UI virrtualization along with custom template.

My ListView Control XAML

 <controls:ListViewExtra ItemsSource="{Binding Path=POView}" ItemContainerStyleSelector="{StaticResource listViewItemStyleSelector}"
  VirtualizingStackPanel.IsVirtualizing="true"                                       
  ScrollViewer.IsDeferredScrollingEnabled="True" VirtualizingStackPanel.VirtualizationMode="Recycling" 
 IsSynchronizedWithCurrentItem="True" Template="{StaticResource CustomListView2}"
 >                                       
                    <controls:ListViewEx.View>
                        <GridView ScrollViewer.VerticalScrollBarVisibility="Visible" ColumnHeaderContainerStyle="{StaticResource listViewHeaderStyle}">
                            <GridViewColumn Width="110" Header="" CellTemplate="{StaticResource cellTemplateButtons}" />
                            <GridViewColumn Header="Name" controls:GridViewHeaderRowPresenterEx.MinimumWidth="150" CellTemplate="{StaticResource cellTemplateName}" controls:ListViewEx.SortPropertyPath="Drug.Name" />
                            <GridViewColumn Header="Id" CellTemplate="{StaticResource cellTemplateDose}" Width="100"/>

                        </GridView>
                    </controls:ListViewExtra.View>
                </controls:ListViewExtra>

And the template "CustomListView2" is as follows.

<ControlTemplate x:Key="CustomListView2" TargetType="{x:Type ListView}">
        <Border Name="Border">
            <Grid>
                <ScrollViewer Style="{StaticResource ListViewScrollViewer2}">
                    <ItemsPresenter/>
                </ScrollViewer>
            </Grid>
        </Border>
    </ControlTemplate>

Any help would be appreciated.

Upvotes: 0

Views: 2161

Answers (2)

Relativity
Relativity

Reputation: 6868

Have a look at this link. As it is mentioned, ADD FOLLOWING INTO ScrollContentPresenter definition: CanContentScroll="{TemplateBinding CanContentScroll}". It is working now. Thank you!

Upvotes: 1

ianschol
ianschol

Reputation: 686

Because you're overriding the ControlTemplate, you're also overriding the underlying elements that enable virtualization. Re-adding virtualizing controls (such as the VirtualizingStackPanel) into your ControlTemplate should get it working again.

This similar-but-not-exactly-the-same thread may help.

Upvotes: 0

Related Questions