Вы можете использовать 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");
}
** Выход **
В качестве альтернативы, вы можете также связать ClickCommand
свойство для реализации этого, используя шаблон MVVM.
Спасибо ... я проверил его, и он очень помогает. но я хочу знать, как это сделать сам, я думал что-то вроде этого (http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/), но мне не повезло –