在WinRT中处理控件上的水平滑动

时间:2013-03-22 03:07:57

标签: c# .net windows-runtime windows-store-apps winrt-xaml

所以假设我的左边缘有一个宽度为200px的堆叠面板。现在我想在此面板上从左到右处理水平滑动并显示其他面板。然后处理从右向左滑动以隐藏它。

我尝试处理页面的ManipulationStartedManipulationDelta事件,但它似乎对鼠标没有任何影响。任何想法,可能是一种简单的方法来实现它?

我尝试过的: 处理页面的滑动事件,并在滑动检查开始时,如果它是在stackpanel的边界内启动,否则我会忽略它。

如果滑动的增量超过正40,则看起来像是从左到右滑动。

我的XAML文件:

// standard stuff of page
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel Orientation="Vertical" Width="200" HorizontalAlignment="Left" Background="White" x:Name="Panel"/>
</Grid>

//继续标准的东西

C#文件:

    public MainPage()
    {
        this.InitializeComponent();
        this.ManipulationDelta += MainPage_ManipulationDelta;
        this.ManipulationStarted += MainPage_ManipulationStarted;
    }

    private void MainPage_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("heh");
        if (e.Position.X < 200)
        {
            initialPoint = e.Position;
            isSwiping = true;
        }
    }

    private void MainPage_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
       if (e.IsInertial && isSwiping)
        {
            Point currentPoint = e.Position;
            if (currentPoint.X - initialPoint.X >= 40)
            {
                isSwiping = false;
                e.Complete();

                System.Diagnostics.Debug.WriteLine("finished swipe :)");
            }
        }
    }

    private Point initialPoint;
    private Boolean isSwiping;

(再次省略默认空白页)

1 个答案:

答案 0 :(得分:5)

您需要在控件上设置ManipulationMode,例如ManipulationMode =“TranslateX”并让控件响应命中测试(即如果它没有背景 - 将背景设置为透明)以接收操纵事件。

然后再次 - 为什么不使用内置支持滑动的ListView?