2012-02-29 42 views
0

我有一個WPF的列表視圖擴展的控件。如果我使用自定義模板覆蓋「模板」,則UI虛擬化不再存在。UI虛擬化停止時,我使用模板的列表視圖

有人能幫助我有UI virrtualization與自定義模板一起。

我的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> 

任何幫助,將不勝感激。

回答

0

因爲你重寫控件模板,你還重寫底層元素,使虛擬化。將虛擬化控件(如VirtualizingStackPanel)重新添加到您的ControlTemplate中應該可以再次運行。

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

+0

我應該在哪裏添加虛擬化面板?我綁定在「ListViewExtra」中添加...但沒有任何幫助。 – Relativity 2012-02-29 20:36:27

1

Have a look at this link. 由於它是所提到的,增加下面INTO ScrollContentPresenter定義: CanContentScroll = 「{TemplateBinding CanContentScroll}」。它正在工作。謝謝!