VirtualizingStackPanel没有虚拟化

时间:2015-01-29 16:02:23

标签: c# xaml windows-store-apps

我的ItemsControl中有一个虚拟化堆栈面板,位于滚动查看器中。它似乎没有虚拟化:

<Page
x:Class="IWalker.Views.FullTalkAsStripView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:IWalker.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ScrollViewer x:Name="theScrollViewer" VerticalScrollMode="Disabled" HorizontalScrollMode="Auto" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
        <ItemsControl x:Name="SlideStrip">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <local:PDFPageUserControl Margin="0 0 5 0" Height="{Binding Path=ActualHeight, ElementName=SlideStrip, Mode=OneWay}" ViewModel="{Binding}" RespectRenderingDimension="Vertical" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</Grid>
</Page>

PDFPageUserControl在实例化时打印出一些调试消息 - 即使我收到超过50个项目,我也总是得到一个。 SlideStrip.ItemsSource是数据绑定的,所以我不认为这是问题(通过ReactiveUI):

this.OneWayBind(ViewModel, x => x.Pages, y => y.SlideStrip.ItemsSource);

其中Pages是ReactiveUI列表。

我错过了什么?我需要将IsVirtualizing设置为true吗?在这种情况下,附加属性在哪里(因为这不是ListBox)?

顺便说一句,我永远不会有大量的控件。问题在于每个控件都保持在图像上,并且在那个图像上保持较大的图像(例如,在高DPI显示器上的全屏幕)。我真正想做的就是在每个PDF控件不可见时释放图像,并在它出现时重新加载。所以可能有更好的方法来解决我的问题。

0 个答案:

没有答案