none
如何拖动 FlipView 中的一个控件? RRS feed

  • 问题

  • 一拖动控件,整个 FlipView 也开始滑动了。。。。

    如何设置,在拖动开始的时候,FilpView 不滑动呢?

    2012年11月1日 12:20

答案

  • Hi,

    我发现很难达到你的要求,原因是FlipView中没有办法禁掉拖动的这个动作,因为是先处理动作再处理里面的代码所以每次都只能够第二次才能生效。所以如果想要拖动里面控件滑动的话你可以参考一下Bob的这个例子:

    https://skydrive.live.com/#cid=51B2FDD068799D15&id=51B2FDD068799D15%211081

    他的做法是上面放一个按钮,点一下之后会把所有的控件变成能够拖动的。实际做法是在类似FlipView的上面放了一个大小一样的不显示的Grid,这个时候控件是可以接受信息的,如果点一下那个按钮就会让Grid组织这些控件接受信息,Grid通过接受移动位置信息之后传给相应的控件,来实现拖动里面的控件。


    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月7日 8:46
    版主

全部回复

  • Hi,

    如果你用Manipulation事件去接受移动信息的话,对于信息处理结束后设置e.handled=true,阻止路由事件继续向上传递。


    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月2日 5:23
    版主
  • e.handled 好像没有任何效果。

    但是设置了 FlipView 的子控件StaticPanel 的ManipulationMode后,不管怎么滑动StaticPanel ,FlipView 都不动了。这样又出现一个新问题,FlipView 翻页操作不方便了。如果在StaticPanel 上翻页,就不会有任何响应。

    我的意图是长按了StaticPanel 后,触发拖放状态。这个时候 FlipView 就不允许滑动。如果没有触发拖放状态,可以正常翻页。

    2012年11月3日 7:46
  • Hi,

    如果不介意的话能给我一些代码吗?我希望能够看一下FlipView中的控件是怎么放的。


    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月5日 8:28
    版主
  • XAML

        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <FlipView Margin="300,150" Name="fv">
                <FlipViewItem >
                    <Canvas >
                        <StackPanel Canvas.Top="140" Canvas.Left="140" >
                            <TextBlock Text="text 1" FontSize="50"/>
                        </StackPanel>
                    </Canvas>
                </FlipViewItem>
                <FlipViewItem >
                    <Canvas Name="canvas2" >
                        <StackPanel Name="panel2" Canvas.Top="140" Canvas.Left="140" >
                            <TextBlock Text="text 2" FontSize="50"/>
                        </StackPanel>
                    </Canvas>
                </FlipViewItem>
                <FlipViewItem >
                    <Canvas >
                        <StackPanel Canvas.Top="140" Canvas.Left="140" >
                            <TextBlock Text="text 3" FontSize="50"/>
                        </StackPanel>
                    </Canvas>
                </FlipViewItem>
            </FlipView>
        </Grid>

    代码:


        Dim bDrag As Boolean

        Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
            fv.SelectedIndex = 1

            '如果在这里设置ManipulationMode,那么在 canvas2 上滑动无法滑动 flipview
            'canvas2.ManipulationMode = ManipulationModes.All
        End Sub

        Private Sub canvas2_Holding(sender As Object, e As HoldingRoutedEventArgs) Handles canvas2.Holding
            bDrag = True

            '如果在这里设置ManipulationMode,无法马上生效,必须松开下次滑动才生效
            'canvas2.ManipulationMode = ManipulationModes.All
        End Sub

    我希望的效果:

    长按 canvas2 后,则表示开始拖动。flipview 将不能滑动。

    2012年11月5日 13:00
  • Hi,

    我发现很难达到你的要求,原因是FlipView中没有办法禁掉拖动的这个动作,因为是先处理动作再处理里面的代码所以每次都只能够第二次才能生效。所以如果想要拖动里面控件滑动的话你可以参考一下Bob的这个例子:

    https://skydrive.live.com/#cid=51B2FDD068799D15&id=51B2FDD068799D15%211081

    他的做法是上面放一个按钮,点一下之后会把所有的控件变成能够拖动的。实际做法是在类似FlipView的上面放了一个大小一样的不显示的Grid,这个时候控件是可以接受信息的,如果点一下那个按钮就会让Grid组织这些控件接受信息,Grid通过接受移动位置信息之后传给相应的控件,来实现拖动里面的控件。


    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月7日 8:46
    版主