2016-02-23 2 views
3

Я переношу приложение на платформу Univeral Windows (Windows 10).Longpress in UWP

У Android есть onLongPress event. Есть ли эквивалент для UWP?

я нашел есть Holding event, который я пытался использовать что-то вроде этого:

private void Rectangle_Holding(object sender, HoldingRoutedEventArgs e) 
{ 
    if (e.HoldingState == HoldingState.Started) 
    { 
     Debug.WriteLine("Holding started!"); 
    } 
} 

Проблема это событие не запускается на рабочем столе Windows, когда мышь используется вместо прикосновения.

+0

Вы должны попробовать событие мыши для случая настольного приложения. –

ответ

4

Ввод ввода не приводит к событиям холдинга по умолчанию, вы должны использовать событие RightTapped для отображения контекстного меню, оно запускается, когда пользователь долго нажимает на сенсорное устройство и щелкает правой кнопкой мыши на устройстве мыши.

Посмотрите на GestureRecognizer.Holding и Detect Simple Touch Gestures, вы можете добиться того, что с помощью следующего кода

public sealed partial class MainPage : Page 
{ 
    GestureRecognizer gestureRecognizer = new GestureRecognizer(); 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     gestureRecognizer.GestureSettings = Windows.UI.Input.GestureSettings.HoldWithMouse;   
    } 

    void gestureRecognizer_Holding(GestureRecognizer sender, HoldingEventArgs args) 
    { 
     MyTextBlock.Text = "Hello"; 
    } 

    private void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     gestureRecognizer.Holding += gestureRecognizer_Holding; 
    } 

    private void Grid_PointerPressed(object sender, PointerRoutedEventArgs e) 
    { 
     var ps = e.GetIntermediatePoints(null); 
     if (ps != null && ps.Count > 0) 
     { 
      gestureRecognizer.ProcessDownEvent(ps[0]); 
      e.Handled = true; 
     } 
    } 

    private void Grid_PointerMoved(object sender, PointerRoutedEventArgs e) 
    { 
     gestureRecognizer.ProcessMoveEvents(e.GetIntermediatePoints(null)); 
     e.Handled = true; 
    } 

    private void Grid_PointerReleased(object sender, PointerRoutedEventArgs e) 
    { 
     var ps = e.GetIntermediatePoints(null); 
     if (ps != null && ps.Count > 0) 
     { 
      gestureRecognizer.ProcessUpEvent(ps[0]); 
      e.Handled = true; 
      gestureRecognizer.CompleteGesture(); 
     } 
    } 
} 
+0

Благодарим вас за ответ, но он не должен открывать контекстное меню, поэтому щелчок правой кнопкой не кажется таким естественным. – holmis83

+0

Я добавил [GestureRecognizer.Holding] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.input.gesturerecognizer.holding.aspx), и он решит вашу проблему. –

+0

@ holmis83, если это помогло, рассмотрите [прием ответа] (http://stackoverflow.com/help/someone-answers) –