当我使用listview的模板时,UI虚拟化停止

时间:2012-02-29 19:09:49

标签: wpf templates listview ui-virtualization

我在WPF中从listview扩展了一个控件。如果我使用自定义模板覆盖“模板”,则UI虚拟化不再存在。

有人可以帮助我将UI虚拟化与自定义模板一起使用。

我的ListView控件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>

模板“CustomListView2”如下。

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

Have a look at this link. 如上所述,添加以下内容ScrollContentPresenter定义: CanContentScroll =&#34; {TemplateBinding CanContentScroll}&#34;。它现在正在运作。谢谢!

答案 1 :(得分:0)

因为您要覆盖ControlTemplate,所以您还要覆盖启用虚拟化的基础元素。将虚拟化控件(例如VirtualizingStackPanel)重新添加到ControlTemplate中应该可以让它再次运行。

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