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

ims*_*vko 1 .net c# windows-runtime winrt-xaml windows-store-apps

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

我试过处理页面ManipulationStartedManipulationDelta事件,但它似乎没有任何影响,至少用鼠标.任何想法,可能是一个简单的方法来实现它?

我尝试了什么:处理页面的滑动事件和刷卡检查的开始,如果它是在stackpanel的边界内启动,否则我忽略它.

如果滑动的delta超过正40,看起来像是从左到右滑动.

我的XAML文件:

// standard stuff of page
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel Orientation="Vertical" Width="200" HorizontalAlignment="Left" Background="White" x:Name="Panel"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

//继续标准的东西

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;
Run Code Online (Sandbox Code Playgroud)

(再次省略默认空页)

Fil*_*kun 5

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

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