0

我有一个从 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>

任何帮助,将不胜感激。

4

2 回答 2

1

看看这个链接。 如前所述,将以下内容添加到 ScrollContentPresenter 定义中:CanContentScroll="{TemplateBinding CanContentScroll}"。它现在正在工作。谢谢!

于 2012-02-29T21:03:27.833 回答
0

因为您覆盖了 ControlTemplate,所以您也覆盖了启用虚拟化的底层元素。将虚拟化控件(例如 VirtualizingStackPanel)重新添加到 ControlTemplate 中应该可以让它再次工作。

这个相似但不完全相同的线程可能会有所帮助。

于 2012-02-29T19:46:31.187 回答