前言
前几天,由于wpf项目需要用到类似安卓手机的时间选择控件,网上搜索了好久,没有找到类似的,于是乎自己写了一个,可供参考。
思路
思路一
一开始参考了网上一位博主的做法,一开始设定好三个标签,然后手指滑动的时候改变这三个标签的位置,从而实现滑动的效果,从结果上,这个效果还是蛮不错的,但是由于改变的时候是三个标签一起变,因此会产生一瞬间的回弹感,不太适合,且其动画效果有些难以处理,因此作罢。
思路二
在找资料的时候,看见了WPF 循环显示列表这篇文章,其本意是构建一个窗口,每次滚动就刷新窗口中的值,基于这个思路以及之前尝试的ScrollViewer控件,我有了一个较为明确且可行的思路。
即在窗口初始化的时候生成所有的时间,然后使其处于中间位置,例如24个数字,初始数字为0,则上面生成12~23,下面生成0 ~11,这样做的目的是使0在中间的时候,可以向上滑动和向下滑动。如何实现滑动,则需要用到ScrollViewer控件。
如上图所示,红色代表我们的窗口,黑色代表ScrollViewer,而蓝色则是我们一开始就生成好的数字列表,我们把生成好的数字列表放在ScrollViewer中,并使其滑动到中间位置,这个时候就可以实现上下滑动并且看起来时间是循环的。
这里还需要解决一个问题,当向上或者向下滑动到最始或最末端的时候,就无法滑动了,这不符合我们的循环的理念,因此,解决方案是在滑动触摸结束的时候,重新刷新列表中的数据,并且继续滑动到中间位置,这样,我们就实现了无限循环(如果不一下子滑倒底的话,为了防止这种情况,可以将列表扩大一倍)。
实现效果如下图所示:
代码以后再贴上来。