我有一个带有ListView nad WrapGrid的
Windows Phone 8.1 XAML应用程序作为其ItemsPanel来显示两列中的项目
<ListView x:Name="ListV" ItemClick="ListV_ItemClick" IsItemClickEnabled="True"> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapGrid Orientation="Horizontal" ItemWidth="160" ItemHeight="280" MaximumRowsOrColumns="2" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <Grid Background="Red" Margin="12" Width="100" Height="100"></Grid> </DataTemplate> </ListView.ItemTemplate> </ListView>
页面的缓存模式设置为NavigationCacheMode.required.
我在列表中搜索,点击一个项目并导航到另一个屏幕.当我使用ListView导航回页面时,ListView会记住scoll位置(NavigationCacheMode.required),但会“破坏”,当我点击项目时,他们只是奇怪地跳起来.
以下是重现问题的完整简单解决方案:https://dl.dropboxusercontent.com/u/73642/listview.zip.
这是一个显示问题的视频:https://dl.dropboxusercontent.com/u/73642/listview.wmv
解决方法
我发现的一个解决方法是将ListView包装在ScrollViewer中.这是垂直滚动查看器的样式:
<Style x:Key="VerticalScrollViewerStyle" TargetType="ScrollViewer"> <Setter Property="HorizontalScrollBarVisibility" Value="Disabled" /> <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled" /> <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled" /> <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" /> </Style>
然后你像这样包装ListView:
<ScrollViewer Style="{StaticResource VerticalScrollViewerStyle}"> <ListView ...> ... </ListView> </ScrollViewer>
这样就不会使用ListView的内部ScrollViewer,这似乎可以解决您的问题.现在,ListView的某些功能可能存在一些问题,这些功能依赖于要使用的内部ScrollViewer(例如增量加载).你将测试它,你会看到你需要什么工作.