我试图在LongListSelector
中显示大约1400个项目。虽然它正确地显示了项目,但有时候,当我如此快速地向下滚动到底部然后开始向上滚动时,它并没有显示所有项目,尽管绑定收集的内容没有改变,但它几乎没有显示100项后端。
这是我的UI代码:
<phone:PanoramaItem Header="Monitors" Margin="{StaticResource PanoramaItemMargin}" HeaderTemplate="{StaticResource PanoramaItemHeaderTemplate}">
<phone:LongListSelector ItemsSource="{Binding MonitorRenderList}" VirtualizingStackPanel.VirtualizationMode="Recycling" Margin="-15,-15,0,0">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<common:MonitorListTemplateSelector Content="{Binding}" HorizontalAlignment="Left">
<common:MonitorListTemplateSelector.MonitorBucket>
<DataTemplate>
<TextBlock Text="{Binding titleUpperCase}" Margin="0,5,10,5" FontWeight="Bold" Foreground="{StaticResource AppForegroundHighlightTextBrush}" TextWrapping="NoWrap" TextTrimming="WordEllipsis" FontSize="{StaticResource RowHeaderFontSize}"/>
</DataTemplate>
</common:MonitorListTemplateSelector.MonitorBucket>
<common:MonitorListTemplateSelector.MonitorDetails>
<DataTemplate>
<TextBlock Text="{Binding monitorName}" Margin="0,5,10,5" FontSize="{StaticResource TextRowFontSize}" Foreground="{StaticResource AppForegroundNormalTextBrush}" TextWrapping="NoWrap" TextTrimming="WordEllipsis">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<i:InvokeCommandAction Command="{Binding DataContext.SelectedMonitorDetailsCommand, ElementName=LandingPageRoot, Mode=OneTime}" CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</DataTemplate>
</common:MonitorListTemplateSelector.MonitorDetails>
<common:MonitorListTemplateSelector.EmptyLastItem>
<DataTemplate>
<TextBlock Height="72" />
</DataTemplate>
</common:MonitorListTemplateSelector.EmptyLastItem>
</common:MonitorListTemplateSelector>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</phone:PanoramaItem>
编辑:只有当LongListSelector
中包含Panorama
时,即使只有一个panoramaItem
,但是当我移动它时,似乎也会出现此问题在全景之外,它并没有发生。
答案 0 :(得分:1)
Windows Phone的每个Silverlight控件都有大小限制。它可以在宽度和高度上显示最多2048个像素。
由于这个原因,您的问题可能会发生。你检查过了吗?
答案 1 :(得分:1)
这是正常行为,它是由控件的内置虚拟化引起的。当数据绑定集合太大时,虚拟化就会启动,以保持控件的性能不变。
如果没有UI虚拟化,整个数据集将保留在内存中,并且会为列表中的每个项目创建一个项容器,从而削弱应用程序的性能,并可能抛出将终止它的OutOfMemoryException。 p>
使用UI虚拟化,数据集仍保留在内存中,但只有当项目几乎准备好在UI中显示时,才会创建项容器,从而保持较低的内存消耗。
默认情况下,所有项目控件都启用UI虚拟化。
修改强>
取自Daniel Vaughan的 - Windows Phone 8 Unleashed,SAMS Publishing
由于Panorama旨在诱使用户进行探索,因此它应该显示内容 有趣且具体的用户。用户也不应该过多负担 内容;认为空格和没有数据负载。全景应该被认为是 一个起始位置,包含将用户带到更详细页面的数据和链接 内容,例如可能包含Pivot的页面。然后用户可以离开 全景的探索风格,为更加专注的Pivot风格。
也来自此链接:http://ux.artu.tv/?p=234
全景图无法容纳大量数据。出于性能和体验原因,如果您需要为用户提供大量内容,请不要使用全景图。多少是太多了?一般留在3到5个全景面板内。使用最多使用15-20个项目的ListBox。全景图不是虚拟化的(内存管理),因此将它们看作几乎与动态内容控件(如Pivots)一样大的平面图像。再一次,它们更像是杂志封面 - 美丽而身临其境。