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

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

假设我在左侧边缘有宽度为 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;

(再次省略默认空页)

最佳答案

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

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

关于c# - 在 WinRT 中处理控件上的水平滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562037/

相关文章:

c# - Windows 8 XAML 应用程序 - C++ 与 C# - 用户体验差异

c# - 构造函数/析构函数链接错误

c# - 编写我自己的 IScheduler 来管理线程,最好的方法是什么?

c# - 如何用一个入口点对一个类进行单元测试?

c# - Mac版Visual C#

c# - WPF 错误还是我要疯了?

windows-runtime - Win10 平板模式下的 WebAuthenticationBroker

c# - 使用动态列名从 Entity Framework 中选择不同的列

c# - 输出存储过程结果

c++ - 在 CameraCaptureUI 中限制 'change camera"按钮中的相机类型