2015-05-22 13 views
5

voglio gestire l'evento click/tap su un controllo WebViewxamarin.forms gestire l'evento cliccato su WebView

Ho provato le GestureRecognizers, ma non succede nulla, penso che forse il WebView ha una sorta di rendere l'evento gestito "vero".

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

E ho provato usando codice C# troppo dietro, ma senza fortuna:/

risposta

1

È possibile utilizzare l'HybridWebView da XLabs, e l'uso javascript iniezione per invocare e gestire clic nel controllo Xamarin. Il codice javascript iniettato può aggiungere un listener di eventi click allo stage capture. Quando viene rilevato un clic, viene utilizzata la richiamata Native per inviare le informazioni al codice C#.

Per esempio - è possibile definire un controllo personalizzato come questo:

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); 
     }); 
    } 
} 

utilizzo Esempio XAML

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

e code-behind di esempio

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

** ** uscita

sample output

In alternativa, è anche possibile associare ClickCommand proprietà per implementare questo modello MVVM utilizzando.

1

Gesto riconoscitore non funziona con WebView. Puoi provare a utilizzare MR.Gestures

Per ottenere tutte le funzionalità dovrai acquistare una licenza.

Se si dimentica di configurare la chiave di licenza correttamente o la chiave non corrisponde il nome di app, quindi tutti gli eventi sarà ancora essere sollevato, ma le proprietà dei EventArgs sarà vuoto. Questo potrebbe essere sufficiente per gli eventi tap e long press, ma non per quelli più complicati.

+1

Grazie ... l'ho controllato e aiuta molto. ma voglio sapere come farlo io stavo pensando qualcosa del genere (http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/) ma non ho avuto fortuna –

Problemi correlati