这几天把我的看漫画的程序的界面调整了一下,在使用GirdView和ListView过程中遇到了不少问题,这里把解决方法记录一下,免得以后少走弯路。
1.ItemsSource绑定后ScrollViewer不复位
ItemsSource绑定后ScrollViewer不复位,有的时候我们需要这一效果,但大多数情况下我们是想让它复位的。在WPF中也有这个问题,我在以前的blog文章中也给出了一种解决方法。在WinRT下解决方法也差不多,在重新绑定数据源前加上这段代码即可:
if (gridView.Items.Count > 0)
{
gridView.ScrollIntoView(gridView.Items[0], ScrollIntoViewAlignment.Leading);
}
这里我就不给依赖属性的封装了,感兴趣的朋友可以自己封装下。
2.ScrollViewer的HorizontalSnapPointsType设置为Mandatory或MandatorySingle时最右边一栏拖动不过来
我比较喜欢将ScrollViewer设置为Mandatory或MandatorySingle,这样滚动项有一种类似磁性的吸靠效果。但这样有一个问题:如果滚动项宽度不一样的时候,最右边一项很容易拖不出来(垂直滚动时也有同样的问题)。
这个问题的原因是右侧没有足够的空白空间,因此改一下ItemsPresenter布局,给右边留一定的空余空间即可:
<GridView.Template>
<ControlTemplate TargetType="GridView">
<Border >
<ScrollViewer x:Name="ScrollViewer" >
<ItemsPresenter Margin="0,0,150,0" HeaderTemplate="{TemplateBinding HeaderTemplate}" />
</ScrollViewer>
</Border>
</ControlTemplate>
</GridView.Template>
这里我的150只是我程序中缺少的空间,大家修改的时候应根据具体情况选择合适的值。另外,这个问题只要使用ScrollViewer就会出现,并不限定于ListView和GridView,解决原理类似。
3.使用ISupportIncrementalLoading的时候有时不会自动增量加载
这个问题主要是用WrapGrid作为Panel的时候有问题,用其它的Panel貌似没有这跟我问题。另外,像我前面的代码那样更改布局也会导致比较容易出,可能和我的IsupportIncrementalLoading实现方式也有关系。目前原因不明,不过设置IncrementalLoadingThreshold貌似能比较有效的解决这一问题。
<GridView IncrementalLoadingThreshold="2" >
这个数字主要控制预加载的次数,因此不要设置的过大,如果出现这个问题建议先设置为1,如果不行的话再设置为2,再不行设置更大估计也没用什么效果。
4.使用ISupportIncrementalLoading的时候重新绑定ItemsSource不加载
这个问题原因也没用找到,估计还是和和我的IsupportIncrementalLoading的实现方式有关系,关于IsupportIncrementalLoading,目前也找不到太多的资料。目前的规避方案是:创建IsupportIncrementalLoading对象时,先自动加载一页,后续就会自动加载了。