Windows Phone 8.1中的ListView在滚动列表时抖动(XAML)

我在Windows Phone 8.1应用程序中滚动ListViews时遇到问题。 短列表滚动得很好,滚动顺畅但是很快虚拟化就会在整个ListView“摆动”中向左轻微踢,但是明显足以令人讨厌。

我已经尝试删除所有过渡到没有效果,以及项目加载增加到没有成功。 将项目面板设置为StackPanel(删除虚拟化)可以解决问题,但不是更可取。

我的列表视图绑定到BasicView模板附带的DefaultViewModel中的属性。

我做错了什么以及导致我的ListViews出现这种行为的原因是什么?

XAML:

                           

所以这似乎是一个操作系统问题,正如MS论坛上的这个post所certificate的那样: http : //social.msdn.microsoft.com/Forums/en-US/9a363d33-5760-4d38-9c81-84259c4edcbe/listview-jiggles -horizo​​ntally-when-large-item-about-to-to-or-out-in-windows-phone-81-preview?forum = WindowsPhonePreviewSDK&prof = required 。

这个问题确实存在于虚拟化中,其中的项目没有固定的宽度。 使用star作为宽度或进行水平对齐拉伸将不起作用,因此考虑方向和分辨率的唯一解决方案是将宽度绑定到ListView的容器的ActualWidth属性:

          

列表视图中的第一个元素未显示,因为在加载页面时,网格的ActiualWidth在第一秒为0。 这是解决方案,这对我有用:

          

这是一个非常讨厌的bug。 我不明白为什么多年以来这个问题没有得到解决。

Imho在垂直滚动列表视图中拉伸项目是一个非常基本的function,应该100%工作。

一个可能的解决方法也是这个剪切,也应该知道大小的变化:

 public class StrechItemsListView : ListView { public StrechItemsListView() { SizeChanged += StrechItemsListView_SizeChanged; } private void StrechItemsListView_SizeChanged(object sender, SizeChangedEventArgs e) { if (ItemsPanelRoot != null) { ItemsPanelRoot.Width = e.NewSize.Width; } } } 

仅将xaml更改为自定义列表视图类型工作更少,更清洁,然后编辑每个数据模板等。只需我的2美分。

我的实践似乎有效。 至少在WP8.1

只需在块中明确设置ItemsPanelTemplate ,但不要使用

Style="{StaticResource ListViewStyle1}"或其他。

示例代码:

                  

VirtualizingStackPanel设置的HorizontalContentAlignmentWidth用于将内容集中在ListView 。您可以自由移动这些设置。我不知道为什么,但它确实有效。

这已在Windows 10 for Windows 8.1应用程序上修复