none
ListView中的手势滑动、轻扫事件 RRS feed

  • 常规讨论

  •    我想使用手势滑动、轻扫事件,便不知道是那些事件,我尝试着使用了Tapped事件,可以实现单击的效果,从http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/hh465387查询 到可以使用组合事件来实现我想要的目地,但刚开始试验就遭遇到失败,PointerPressed这个事件一点反应都没有,

       private void BingMapCityView_PointerPressed_1(object sender, PointerRoutedEventArgs e)
            {
                IsPressed = true;
            }

    我又尝试着把   IsTapEnabled="False" 设置一下,但还是只响应Tapped事件,不响应PointerPressed事件,我想请帮助一下,我如何才能实现手势滑动、轻扫事件,并请详细详解一下实现的原理和我实验失败的原因。谢谢!


    maming

    2012年11月17日 9:20

全部回复

  • 必须首先将 ListView 里面的IsxxxEnable属性设置为 true. 里面很多 你可以依次尝试一下。 
    2012年11月19日 6:22
  • 楼上大侠,还请指教,我试了很多。


    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话

    2012年11月19日 7:24
  • Hi,

    你可以看看这个sample:

    http://code.msdn.microsoft.com/windowsapps/Input-Windows-8-gestures-62c6689b

    上面包括了所有的手势操作。事实上MSDN提到的那些手势基本都是用类似PointerPress或者Manipulation事件进行组合判断得到结果,PointerPressd正常来说可以响应手势的点击,是不是你设置了什么导致的无法响应?


    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年11月19日 7:48
    版主
  •   <ListView    x:Name="BingMapCityView"
                              Tapped="BingMapCityView_Tapped_1"              
                               SelectionMode="Single"
                                BorderBrush="{x:Null}"  
                               SelectionChanged="BingMapCityView_SelectionChanged_1"
                               ItemsSource="{Binding BingMapView}"
                               ItemContainerStyle="{StaticResource ListViewItemStyle1}"
                               ItemTemplate="{StaticResource BingMapListViewTemplate}"

                                Background="{x:Null}"  
                               HorizontalAlignment="Left"                
                               Margin="10,50,0,0"
                               VerticalAlignment="Top"

                               Width="450"
                               Grid.Row="1"/>

      这是我的设置,请查看

                                                     

    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话

    2012年11月19日 9:20
  • Hi,

    应该是我上面说错了。

    我发现ListView很特殊,鼠标的话左键可以触发Tapped事件,右键触发PointerPressed,手势的话点击触发Tapped,而PointerPressed则没有办法触发,而用来显示集合数据的GridView也一样。其他的控件比如我试了Canvas和TextBlock发现是正常的鼠标左键Tapped和PointerPressed。这可能是设计好的模式,如果要判断鼠单击和手势的点击的话用Tapped好了。


    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年11月20日 8:25
    版主
  • Hi,

    应该是我上面说错了。

    我发现ListView很特殊,鼠标的话左键可以触发Tapped事件,右键触发PointerPressed,手势的话点击触发Tapped,而PointerPressed则没有办法触发,而用来显示集合数据的GridView也一样。其他的控件比如我试了Canvas和TextBlock发现是正常的鼠标左键Tapped和PointerPressed。这可能是设计好的模式,如果要判断鼠单击和手势的点击的话用Tapped好了。


    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.

         如果这样的话,我想在LISTVIEW上实现轻扫或者滑动的事情,没有PointerPressed 手势按住这个事件的话,我将要使用什么样的事件组合来达到这个目地?

       使用手势

                  


    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话

    2012年11月21日 0:51
  • Hi,

    按住的话Holding和RightTapped事件都可以,不过两个有区别,Holding在按下抬起会触发,RightTapped只会在按住一会后触发,不过你要是判断滑动的话不建议你这么做,你可以通过ManipulationDelta来判断手势滑动的距离,根据距离来判断是否应该去做下一步的动作(比如翻页等等)。

    ManipulationDelta:

    http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.manipulationdelta.aspx

    因为这个得到手势移动的横坐标,比如:

    e.Delta.Translation.X


    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年11月21日 8:51
    版主
  • Hi,

    按住的话Holding和RightTapped事件都可以,不过两个有区别,Holding在按下抬起会触发,RightTapped只会在按住一会后触发,不过你要是判断滑动的话不建议你这么做,你可以通过ManipulationDelta来判断手势滑动的距离,根据距离来判断是否应该去做下一步的动作(比如翻页等等)。

    ManipulationDelta:

    http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.manipulationdelta.aspx

    因为这个得到手势移动的横坐标,比如:

    e.Delta.Translation.X


    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.

    hi, xue

          我试这个事件,

      private void Grid_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e)
            {
                if (e.Delta.Translation.X == 10)
                {
                    LoadPanel.Begin();
                    Panel.IsOpen = true;
                }
            }

     <Popup x:Name="Panel"  IsOpen="False"  Margin="930,0,0,0" >
                <Grid  ManipulationDelta="Panel_ManipulationDelta_1"
                    Width="450" Height="800" Background="#FF209A19" >    

                </Grid>
            </Popup>

    无论我怎么试,把这个事件加到其它的控件中,也没有任何的效果,我听说过这个事件不好用,但不知道这么不好用,请帮助?


    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话

    2012年11月22日 3:33
  • Hi,

    代码我没试过,不过e.Delta,Translation.X要用>=或者<=

    你这样的话,除非你横向平移正好10的宽度否则都不会触发。


    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年11月22日 4:58
    版主
  • HI, 我也试了,我在  if (e.Delta.Translation.X == 10) 这里直接加断点,可是程序根本就不进来,

    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话

    2012年11月22日 6:02
  • 我说下另一个思路,但没验证~

    在ListView中轻扫手势代表选中ListViewItem

    所以能不能在SelectionChanged事件中实现你轻扫要实现的功能呢?


    • 已编辑 troyou 2012年11月22日 6:50
    2012年11月22日 6:50
  • ManipulationMode=All 这个设置没有?

    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年11月22日 7:08
    版主
  • ManipulationMode=All 这个设置没有?

    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.

           哦,这就对了,要设置这个ManipulationMode=All ,这才有效果了,太曲折了,要好好的看看,谢谢XUE,

      TO: TROYOU

    我说下另一个思路,但没验证~

    在ListView中轻扫手势代表选中ListViewItem

    所以能不能在SelectionChanged事件中实现你轻扫要实现的功能呢?”

      能不能具体说说在SelectionChanged事件中如何实现?

      


    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话

    2012年11月22日 8:11
  •   HI,

              刚测试了一下,ListView上直接使用ManipulationDelta,设置ManipulationMode=All也可以实现滑动和轻扫的操作,太有意思了,这个事件开始是那么的不配合 ,怎么样都不出现,加了ManipulationMode=All 这个设置后,它又是那么的听话,有意思,真有意思。

              这样的话,是不是就不用使用PointerPressed 等事件来操作,是这样的吗?


    maming 这是多么有趣的一件事情,如果这是说开发WIN8 APP的话


    2012年11月22日 8:37