1

因此,假设我在左边缘有宽度为 200 像素的堆栈面板。现在我想在这个面板上处理从左到右的水平滑动并显示附加面板。然后处理从右向左滑动以隐藏它。

我尝试处理页面ManipulationStartedManipulationDelta事件,但它似乎至少对鼠标没有任何影响。任何想法,有什么简单的方法可以实现?

我试过的:处理页面的滑动事件和滑动检查的开始,如果它是在堆栈面板的范围内开始的,否则我忽略它。

如果滑动的增量大于正 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;

(再次省略默认空页)

4

1 回答 1

5

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

再说一遍 - 为什么不直接使用内置支持滑动的 ListView 呢?

于 2013-03-22T17:54:31.140 回答