我想做的"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.我应该用什么方法来实现? 能否提供该方法的相关技术细节或文档连接?
诚心求教, 不胜感激!