Windows Phone 8.1 XAML 中 ListView with WrapGrid 的奇怪行为
本文关键字:WrapGrid with ListView Phone XAML Windows | 更新日期: 2023-09-27 18:32:12
我有一个Windows Phone 8.1 XAML应用程序,其ItemsPanel具有ListView
nad WrapGrid
,用于在两列中显示项目
<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
会想起斯科尔位置(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
(例如增量加载)。您将对其进行测试,看看您需要的东西是否有效。