2016-09-01 8 views
1

Я применяю функцию жеста к своему управлению Label. Я использовал эту ссылку: http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/LongPressGestureRecognizer в Xamarin.Forms

Мне удалось получить событие LongPressGestureRecognizer, когда я выполнял длительное нажатие на управление меткой. Это событие вызывается в файле рендеринга.

Я хочу выполнить некоторую операцию в моем общем коде на LongPressGestureRecognizer события. так как я могу обнаружить это событие в моем общем коде? Как обработать обработчик событий, чтобы получить это событие longpress в моем общем коде?

ответ

0

В пользовательском элементе управления объявить команду:

public class TappedGrid : Grid 
{ 
    public static readonly BindableProperty TappedCommandProperty = 
     BindableProperty.Create(nameof(TappedCommand), 
         typeof(ICommand), 
         typeof(TappedGrid), 
         default(ICommand)); 

    public ICommand TappedCommand 
    { 
     get { return (ICommand)GetValue(TappedCommandProperty); } 
     set { SetValue(TappedCommandProperty, value); } 
    } 

    public static readonly BindableProperty LongPressCommandProperty = 
     BindableProperty.Create(nameof(LongPressCommand), 
           typeof(ICommand), 
           typeof(TappedGrid), 
           default(ICommand)); 

    public ICommand LongPressCommand 
    { 
     get { return (ICommand)GetValue(LongPressCommandProperty); } 
     set { SetValue(LongPressCommandProperty, value); } 
    } 
} 

А затем поднять эту команду из визуализатора:

public class TappedGridRenderer : ViewRenderer 
{ 
    UITapGestureRecognizer tapGesturesRecognizer; 
    UILongPressGestureRecognizer longPressGesturesRecognizer; 

    protected override void OnElementChanged(ElementChangedEventArgs<View> e) 
    { 
     base.OnElementChanged(e); 

     tapGesturesRecognizer = new UITapGestureRecognizer(() => 
     { 
      var grid = (TappedGrid)Element; 
      if (grid.TappedCommand.CanExecute(Element.BindingContext)) 
      { 
       grid.TappedCommand.Execute(Element.BindingContext); 
      } 
     }); 

     longPressGesturesRecognizer = new UILongPressGestureRecognizer(() => 
     { 
      var grid = (TappedGrid)Element; 
      if (longPressGesturesRecognizer.State == UIGestureRecognizerState.Ended && 
        grid.LongPressCommand.CanExecute(Element.BindingContext)) 
      { 
       grid.LongPressCommand.Execute(Element.BindingContext); 
      } 
     }); 

     this.RemoveGestureRecognizer(tapGesturesRecognizer); 
     this.RemoveGestureRecognizer(longPressGesturesRecognizer); 

     this.AddGestureRecognizer(tapGesturesRecognizer); 
     this.AddGestureRecognizer(longPressGesturesRecognizer); 
    } 
} 
+0

Идеального приятель. Благодаря :). Действительно оценен –

Смежные вопросы