none
FlipView循环翻页 RRS feed

  • 问题

  • 如题。如何让FlipView中的选项比如FlipviewItem可以按左右键循环显示,滑动也能循环显示?

    2012年10月11日 3:28

答案

  • Hi,

    这个问题我们研究了一下发现没有什么好的方法,各种方法总是会有缺陷比如在最后总是会没有右边的箭头,改变集合的顺序的话则会完全打乱我们也不推荐这样。因此或者是自己继承自FlipView并重新写处理事件或者是换用HTML+JS来做JS相对来说会灵活很多。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年10月11日 9:17
    版主

全部回复

  • Hi,

    这个问题我们研究了一下发现没有什么好的方法,各种方法总是会有缺陷比如在最后总是会没有右边的箭头,改变集合的顺序的话则会完全打乱我们也不推荐这样。因此或者是自己继承自FlipView并重新写处理事件或者是换用HTML+JS来做JS相对来说会灵活很多。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年10月11日 9:17
    版主
  • Hi,

    这个问题我们研究了一下发现没有什么好的方法,各种方法总是会有缺陷比如在最后总是会没有右边的箭头,改变集合的顺序的话则会完全打乱我们也不推荐这样。因此或者是自己继承自FlipView并重新写处理事件或者是换用HTML+JS来做JS相对来说会灵活很多。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.



    嗯,继承FlipView是个好方法,非常感谢~
    2012年10月11日 9:31
  • 不过我在重写方法中没有发现那两个按钮的方法,能够重写的方法很少,我试着写一个sample明天给你答复。

    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年10月11日 9:34
    版主
  • 不过我在重写方法中没有发现那两个按钮的方法,能够重写的方法很少,我试着写一个sample明天给你答复。

    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    好的,等你的好消息啊,不过我感觉在继承的类里面写style中定义的left 和right的button 事件,不知道行不行。
    2012年10月12日 3:02
  • Hi,

    这是完全可以的,而且比较简单,唯一的问题就是,这就相当于重新做了两个按钮,可能需要手动的处理一些里面内部的问题比如设置按钮方向的属性等等,当然如果不用到的话也可以不考虑。把模板输出出来之后重写一份处理就好。

    而且这样的话似乎不需要继承了,输出模板的话就相当于自定义了整个控件。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年10月12日 3:08
    版主
  • Hi,

    这是完全可以的,而且比较简单,唯一的问题就是,这就相当于重新做了两个按钮,可能需要手动的处理一些里面内部的问题比如设置按钮方向的属性等等,当然如果不用到的话也可以不考虑。把模板输出出来之后重写一份处理就好。

    而且这样的话似乎不需要继承了,输出模板的话就相当于自定义了整个控件。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.



    是吗,不过不是还得处理当前Item为第一个和最后一个FlipViewItem时,左键或者右键不消失的逻辑吗?
    2012年10月12日 4:54
  • Hi,

    刚刚试过了两种方法感觉都不好用。我的建议是,自己创建两个按钮一个向前一个向后然后手动的控制FlipView控件中的SelectedIndex,比如向后的按钮可以这样写:

    int temp = this.flip.SelectedIndex;
                temp++;
                this.flip.SelectedIndex = temp % this.flip.Items.Count;

    向前的与之类似。总体来说我认为在C#中的FlipView控件让里面的Item循环没有太好的解决方案,JavaScript则会很灵活。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年10月12日 6:07
    版主
  • Hi,

    刚刚试过了两种方法感觉都不好用。我的建议是,自己创建两个按钮一个向前一个向后然后手动的控制FlipView控件中的SelectedIndex,比如向后的按钮可以这样写:

    int temp = this.flip.SelectedIndex;
                temp++;
                this.flip.SelectedIndex = temp % this.flip.Items.Count;

    向前的与之类似。总体来说我认为在C#中的FlipView控件让里面的Item循环没有太好的解决方案,JavaScript则会很灵活。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    嗯嗯,按键循环已经没问题了。另外的问题就是手指滑动切换Item还没有实现。貌似按键实现了,但是触控操作还是不行。

    现在,我有个简单想法就是在itemSource下手,给ItemSource使用一个循环链表来实现Item的触控循环?

    2012年10月12日 6:36
  • Hi,

    手动滑动的话完全可以自己来做,对于手势的话Store app支持的还是很好的,你可以看看这里的介绍:

    http://msdn.microsoft.com/en-US/library/windows/apps/xaml/Hh465397

    主要都是通过ManipultionDelta里面路由来的数据可以具体的做判断,可以参考这个文章,比如平移的话Translation.X判断是否大于某个值,大于的话就翻一页等等。

    http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465387.aspx

    官方提供了双向链表的结构,事实上我不推荐使用链表,因为现在的语言下链表唯一有优势的地方在于知道插入或删除的位置而进行插入或删除,其他的则效率差别巨大,你可以看看这个例子:

    http://stackoverflow.com/questions/169973/when-should-i-use-a-list-vs-a-linkedlist

    最终的结论也是不要去用LinkedList,而循环链表需要自己去写不仅麻烦而且效率低(你只是做查询操作,线性表查询效率比链表高)。因此可以使用简单的List<T>就好。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2012年10月12日 7:15
    版主
  • Hi,

    手动滑动的话完全可以自己来做,对于手势的话Store app支持的还是很好的,你可以看看这里的介绍:

    http://msdn.microsoft.com/en-US/library/windows/apps/xaml/Hh465397

    主要都是通过ManipultionDelta里面路由来的数据可以具体的做判断,可以参考这个文章,比如平移的话Translation.X判断是否大于某个值,大于的话就翻一页等等。

    http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465387.aspx

    官方提供了双向链表的结构,事实上我不推荐使用链表,因为现在的语言下链表唯一有优势的地方在于知道插入或删除的位置而进行插入或删除,其他的则效率差别巨大,你可以看看这个例子:

    http://stackoverflow.com/questions/169973/when-should-i-use-a-list-vs-a-linkedlist

    最终的结论也是不要去用LinkedList,而循环链表需要自己去写不仅麻烦而且效率低(你只是做查询操作,线性表查询效率比链表高)。因此可以使用简单的List<T>就好。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    嗯...关于手势,使用Translation.X就没有Item跟着拖动并翻页的效果,我试过并尝试了以下使用TranslateTransform来实现它的拖动,但是没成功。

    如果能知道FlipView的内置动画是如何实现的就好了...

    然后,对于突然想用链表,我是因为使用单链表可以实现FlipView不循环的切换,如果使用循环链表对于循环切换就是不是一劳永逸?这点没试过。

    最后,使用链表性能确实不好...

    2012年10月12日 8:01
  • Hi,

    手动滑动的话完全可以自己来做,对于手势的话Store app支持的还是很好的,你可以看看这里的介绍:

    http://msdn.microsoft.com/en-US/library/windows/apps/xaml/Hh465397

    主要都是通过ManipultionDelta里面路由来的数据可以具体的做判断,可以参考这个文章,比如平移的话Translation.X判断是否大于某个值,大于的话就翻一页等等。

    http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465387.aspx

    官方提供了双向链表的结构,事实上我不推荐使用链表,因为现在的语言下链表唯一有优势的地方在于知道插入或删除的位置而进行插入或删除,其他的则效率差别巨大,你可以看看这个例子:

    http://stackoverflow.com/questions/169973/when-should-i-use-a-list-vs-a-linkedlist

    最终的结论也是不要去用LinkedList,而循环链表需要自己去写不仅麻烦而且效率低(你只是做查询操作,线性表查询效率比链表高)。因此可以使用简单的List<T>就好。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    嗯...关于手势,使用Translation.X就没有Item跟着拖动并翻页的效果,我试过并尝试了以下使用TranslateTransform来实现它的拖动,但是没成功。

    如果能知道FlipView的内置动画是如何实现的就好了...

    然后,对于突然想用链表,我是因为使用单链表可以实现FlipView不循环的切换,如果使用循环链表对于循环切换就是不是一劳永逸?这点没试过。

    最后,使用链表性能确实不好...


    最终通过不断移动Items元素来实现了循环滑动,问题解决了,最后感谢Aaron的热心帮助~~
    2012年10月12日 9:45
  • 是,一开始说过这种方法,不过当时想到有很多人想要做一个类似索引的东西排在底下,这样的话这种索引就做不了了。所以就没推荐。

    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年10月12日 9:52
    版主
  • 是,一开始说过这种方法,不过当时想到有很多人想要做一个类似索引的东西排在底下,这样的话这种索引就做不了了。所以就没推荐。

    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    嗯,暂时没需求做索引,不过要做索引的话确实啊...好吧,还是得老老实实的写
    2012年10月12日 12:27