WinRT下GirdView和ListView控件疑难杂症小结

来源:互联网 发布:淘宝卖家团队管理 编辑:程序博客网 时间:2024/06/07 05:48

这几天把我的看漫画的程序的界面调整了一下,在使用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貌似能比较有效的解决这一问题。

    <GridViewIncrementalLoadingThreshold="2" >

这个数字主要控制预加载的次数,因此不要设置的过大,如果出现这个问题建议先设置为1,如果不行的话再设置为2,再不行设置更大估计也没用什么效果。

 

4.使用ISupportIncrementalLoading的时候重新绑定ItemsSource不加载

这个问题原因也没用找到,估计还是和和我的IsupportIncrementalLoading的实现方式有关系,关于IsupportIncrementalLoading,目前也找不到太多的资料。目前的规避方案是:创建IsupportIncrementalLoading对象时,先自动加载一页,后续就会自动加载了