none
我想实现一个触摸体验更好的"ScrollViewer", 该如何做? RRS feed

  • 问题

  • 我想做的"ScrollViewer"有以下需求:

    1.像System.Windows.Controls.ScrollViewer一样可以添加超过自身尺寸的内容并支持滚动显示;

    2.能够利用Manipulation或其他方法使触摸滚动具有惯性;

    3.滑动超过边界时会在视觉上有阻力并在释放时弹回边界位置, 类似于IOS或Android系统中的滚动效果;

    4.具有自定义外观的边框/滚动条, 并且滚动条在不滚动时能够自动隐藏;

    最好还能够有:

    5.吸附效果, 在拖动或惯性移动结束时, 能够吸附至特定位置, 类似于IOS的桌面滑动效果--滑动结束时最近的一页必然处于正中;

    6.支持XAML, 能够直接作为控件添加到XAML中并在设计窗口显示出效果.

    由于System.Windows.Controls.ScrollViewer本身并不能支持需求3/4/5或我没有找到使用方法, 因此需要自己完整这些效果.

    根据我现有知识, 可能实现的途径有:

    1.模板, 这个感觉有点小复杂, 提取出来的自带模板使用了大量的Theme和模板嵌套, 使得结构看起来有点混乱, 而且我也没找到实现需求3/5的方法;

    2.从ScrollViewer继承并添加自定义功能, 这个需要和途径1配合使用, 但是还是对需求3没办法, 没有找到使ScrollViewer跨越边界的方法;

    3.用户控件, 我对这个方法进行了一点尝试, 但最终还是没能实现, 主要是用户控件容纳其他元素的逻辑有点搞不清楚;

    4.自定义控件, 这个不了解没有尝试;

    5.自定义, 也就是使用Canvas以及其他控件的组装来实现, 不知道和自定义控件有什么异同, 这种方法逻辑比较清晰, 但可能工作量比较大, 而且不能直接添加到XAML中并看到效果, 我用这个方法做了一个实现需求1/2/3/5的样例, 但是效果有点生硬, 在子级元素管理上也有一些硬伤.

    说了这么多, 请问:

    1.没有现成的代码已经实现了我想要的这些功能?

    2.我应该用什么方法来实现? 能否提供该方法的相关技术细节或文档连接?

    诚心求教, 不胜感激!

    2014年12月4日 10:37

答案

  • 你好 Lymin,

    现成的代码的话你先参照一下Surface Control for WPF:

    http://msdn.microsoft.com/en-us/library/ff727690.aspx

    我们可以看到这个SDK支持WFP使用的,并且更加适用于触摸屏,你先看看它满足不满足你想要的功能。



    Barry
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 Lymim 2015年1月13日 1:59
    2014年12月5日 11:38
    版主