2015-05-22 5 views
5

Я хочу, чтобы обрабатывать событие нажмите/водопроводное на элемент управления WebViewxamarin.forms Handle Clicked события на WebView

Я попытался GestureRecognizers, но ничего не происходит, я думаю, что, может быть, WebView есть какое-то делает событие обрабатывается «правда».

<WebView> 
    <WebView.GestureRecognizers> 
     <TapGestureRecognizer 
       Tapped="OnWebViewClick" 
       NumberOfTapsRequired="1" /> 
    </WebView.GestureRecognizers> 
</WebView> 

И я попытался его с помощью C# код позади тоже, но не повезло:/

ответ

1

Вы можете использовать HybridWebView из XLabs, а также использование Javascript инъекции для вызова и обрабатывать щелчки под вашим контролем Xamarin. Введенный код javascript может добавить прослушиватель событий щелчка на этапе capture. Когда обнаружен щелчок, он использует обратный вызов Native для отправки информации обратно на код C#.

Например - Вы можете определить пользовательский элемент управления, как это:

public class ClickEventArgs : EventArgs 
{ 
    public string Element { get; set; } 
} 

public class ClickableWebView : XLabs.Forms.Controls.HybridWebView 
{ 
    public event EventHandler<ClickEventArgs> Clicked; 

    public static readonly BindableProperty ClickCommandProperty = 
     BindableProperty.Create("ClickCommand", typeof(ICommand), typeof(ClickableWebView), null); 

    public ICommand ClickCommand 
    { 
     get { return (ICommand)GetValue(ClickCommandProperty); } 
     set { SetValue(ClickCommandProperty, value); } 
    } 

    public ClickableWebView() 
    { 
     LoadFinished += (sender, e) => 
      InjectJavaScript(@" 
      document.body.addEventListener('click', function(e) { 
       e = e || window.event; 
       var target = e.target || e.srcElement; 
       Native('invokeClick', 'tag='+target.tagName+' id='+target.id+' name='+target.name); 
      }, true /* to ensure we capture it first*/); 
     "); 

     this.RegisterCallback("invokeClick", (string el) => { 
      var args = new ClickEventArgs { Element = el }; 

      Clicked?.Invoke(this, args); 
      ClickCommand?.Execute(args); 
     }); 
    } 
} 

Пример использования XAML

<local:ClickableWebView 
    Uri="https://google.com" 
    Clicked="Handle_Clicked" 
/> 

и образец кода за

void Handle_Clicked(object sender, CustomWebView.ClickEventArgs e) 
{ 
    Xamarin.Forms.Application.Current.MainPage.DisplayAlert("WebView Clicked", e.Element, "Dismiss"); 
} 

** Выход **

sample output

В качестве альтернативы, вы можете также связать ClickCommand свойство для реализации этого, используя шаблон MVVM.

1

Жест распознаватель не работает с WebView. Вы можете попробовать использовать MR.Gestures

Чтобы получить все функции, вам необходимо будет приобрести лицензию.

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

+1

Спасибо ... я проверил его, и он очень помогает. но я хочу знать, как это сделать сам, я думал что-то вроде этого (http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/), но мне не повезло –

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