Ich habe ein Codebeispiel erstellt und reproduzieren Ihr Problem, wenn das WebView mehrere Website durchsuchen. Und ich habe im Quellcode Xamarin.Forms Grund gefunden.
void UpdateCanGoBackForward()
{
((IWebViewController)Element).CanGoBack = Control.CanGoBack;
((IWebViewController)Element).CanGoForward = Control.CanGoForward;
}
Die CanGoBack
Eigenschaft wird geändert werden, wenn UpdateCanGoBackForward
Methode aufgerufen. Und UpdateCanGoBackForward
Methode wurde nur aufgerufen, wenn das systemeigene Ereignis NavigationCompleted
aufgerufen wurde. Wenn also eine Website nicht schnell geladen werden kann, wird die CanGoBack
-Eigenschaft nicht geändert.
Sie können dieses Design durch benutzerdefinierte WebView verbessern. Und Sie könnten dem folgenden Code folgen.
CustomWebView.cs
die neue Eigenschaft für CustomWebView
hinzufügen.
public class CustomWebView : WebView
{
public bool CCanGoBack { get; set; }
public CustomWebView()
{
}
}
CustomWebViewRenderer.cs
Und die Eigenschaft ändern, wenn das ContentLoading Ereignis aufgerufen.
[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]
namespace CustomWebViewTest.UWP
{
public class CustomWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.ContentLoading += Control_ContentLoading;
}
}
private void Control_ContentLoading(Windows.UI.Xaml.Controls.WebView sender, Windows.UI.Xaml.Controls.WebViewContentLoadingEventArgs args)
{
(Element as CustomWebView).CCanGoBack = Control.CanGoBack;
}
}
}
MainPage.cs
private void backClicked(object sender, EventArgs e)
{
if (Browser.CCanGoBack)
{
Browser.GoBack();
}
}
Nur ein Kommentar, dass, obwohl diese UWP tat beheben, es Android brach (da ich nicht einen benutzerdefinierten Renderer für droid hatte). Ich war mir nicht sicher, was ich im Android-Renderer tun sollte, anstatt einen zu erstellen, ich mache einfach eine RuntimePlatform-Prüfung und überprüfe entweder CCanGoBack oder CanGoBack abhängig von der Plattform. – erin