【问题标题】:Custom Edge Swipe Event in Windows (For Bottom Edge)Windows 中的自定义边缘滑动事件(用于底部边缘)
【发布时间】:2019-10-03 16:40:42
【问题描述】:

我想打开一个应用程序或通过底部滑动来做某事,那么我该怎么做才能获得该事件?是这样的:https://www.microsoft.com/zh-cn/videoplayer/embed/fc016fcc-2bb1-4294-b236-343e1a533401?autoCaptions=en-us

我尝试在 UWP 应用程序中使用 EdgeGesture 类,它为 StartingCompletedCanceled 提供事件。但是当我在屏幕边缘滑动时,没有触发任何事件。

在 MainPage.xaml.cs 中:

public MainPage()
{
    this.InitializeComponent();

    //ApplicationView.GetForCurrentView().TryEnterFullScreenMode();

    EdgeGesture gesture = EdgeGesture.GetForCurrentView();

    gesture.Starting += Gesture_Starting;
    gesture.Completed += Gesture_Completed;
    gesture.Canceled += Gesture_Canceled;
}

private void Gesture_Canceled(EdgeGesture sender, EdgeGestureEventArgs args)
{
    throw new NotImplementedException();
}

private void Gesture_Completed(EdgeGesture sender, EdgeGestureEventArgs args)
{
    throw new NotImplementedException();
}

private void Gesture_Starting(EdgeGesture sender, EdgeGestureEventArgs args)
{
    throw new NotImplementedException();
}

不知道是不是我做错了,能帮帮我吗?还是有其他方法可以做到这一点?

【问题讨论】:

    标签: c# windows uwp


    【解决方案1】:

    在桌面模式下,UWP 应用程序是一个窗口应用程序,难以捕捉屏幕边缘滑动事件,EdgeGesture 可能在平板电脑模式下工作。

    为了适应不同情况的滑动需求,可以考虑使用GestureRecognizer

    这里我给你一个简单的页面供你参考。

    <Page ...>
        <Grid Background="White">
        </Grid>
    </Page>
    
    private GestureRecognizer _GestureRecognizer;
    PointerEventHandler PointerPressedEventHandler;
    PointerEventHandler PointerMovedEventHandler;
    PointerEventHandler PointerReleasedEventHandler;
    PointerEventHandler PointerCanceledEventHandler;
    private double startY = 0;
    private double moveY = 0;
    
    public GesturePage()
    {
        this.InitializeComponent();
        _GestureRecognizer = new GestureRecognizer();
        _GestureRecognizer.GestureSettings = GestureSettings.ManipulationTranslateY;
        _GestureRecognizer.ManipulationStarted += _GestureRecognizer_ManipulationStarted;
        _GestureRecognizer.ManipulationUpdated += _GestureRecognizer_ManipulationUpdated;
        _GestureRecognizer.ManipulationCompleted += _GestureRecognizer_ManipulationCompleted;
    
        PointerPressedEventHandler = new PointerEventHandler(_PointerPressed);
        PointerMovedEventHandler = new PointerEventHandler(_PointerMoved);
        PointerReleasedEventHandler = new PointerEventHandler(_PointerReleased);
        PointerCanceledEventHandler = new PointerEventHandler(_PointerCanceled);
    
        this.AddHandler(UIElement.PointerPressedEvent, PointerPressedEventHandler, true);
        this.AddHandler(UIElement.PointerMovedEvent, PointerMovedEventHandler, true);
        this.AddHandler(UIElement.PointerReleasedEvent, PointerReleasedEventHandler, true);
        this.AddHandler(UIElement.PointerCanceledEvent, PointerCanceledEventHandler, true);
    }
    private void _GestureRecognizer_ManipulationStarted(GestureRecognizer sender, ManipulationStartedEventArgs args)
    {
        startY = args.Position.Y;
    }
    
    private void _GestureRecognizer_ManipulationUpdated(GestureRecognizer sender, ManipulationUpdatedEventArgs args)
    {
        moveY += Math.Abs(args.Delta.Translation.Y);
    }
    
    private void _GestureRecognizer_ManipulationCompleted(GestureRecognizer sender, ManipulationCompletedEventArgs args)
    {
        if (moveY >= 50)
        {
            // Can be understood as sliding a distance
            if (startY <= 10)
            {
                // head to foot
            }
            else if (startY >= Window.Current.Bounds.Height - 10)
            {
                // foot to head
            }
            startY = 0;
            MoveY = 0;
        }
    }
    private void _PointerPressed(object sender, PointerRoutedEventArgs e)
    {
        var pointer = e.GetCurrentPoint(this);
        _GestureRecognizer.ProcessDownEvent(pointer);
    }
    
    private void _PointerMoved(object sender, PointerRoutedEventArgs e)
    {
        var pointers = e.GetIntermediatePoints(this);
       _GestureRecognizer.ProcessMoveEvents(pointers);
    }
    
    private void _PointerCanceled(object sender, PointerRoutedEventArgs e)
    {
        var pointer = e.GetCurrentPoint(this);
        _GestureRecognizer.CompleteGesture();
    }
    
    private void _PointerReleased(object sender, PointerRoutedEventArgs e)
    {
        var pointer = e.GetCurrentPoint(this);
        _GestureRecognizer.ProcessUpEvent(pointer);
    }
    

    手指、鼠标和笔在点击屏幕时触发Pointer 相关事件。上述代码的目的是捕获Pointer事件,并传递给GestureRecognizer进行处理。

    这里是document

    最好的问候。

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 2014-10-10
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多