summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/WebView.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core/WebView.cs')
-rw-r--r--Xamarin.Forms.Core/WebView.cs126
1 files changed, 126 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core/WebView.cs b/Xamarin.Forms.Core/WebView.cs
new file mode 100644
index 00000000..06a5f72c
--- /dev/null
+++ b/Xamarin.Forms.Core/WebView.cs
@@ -0,0 +1,126 @@
+using System;
+using Xamarin.Forms.Platform;
+
+namespace Xamarin.Forms
+{
+ [RenderWith(typeof(_WebViewRenderer))]
+ public class WebView : View
+ {
+ public static readonly BindableProperty SourceProperty = BindableProperty.Create("Source", typeof(WebViewSource), typeof(WebView), default(WebViewSource),
+ propertyChanging: (bindable, oldvalue, newvalue) =>
+ {
+ var source = oldvalue as WebViewSource;
+ if (source != null)
+ source.SourceChanged -= ((WebView)bindable).OnSourceChanged;
+ }, propertyChanged: (bindable, oldvalue, newvalue) =>
+ {
+ var source = newvalue as WebViewSource;
+ var webview = (WebView)bindable;
+ if (source != null)
+ {
+ source.SourceChanged += webview.OnSourceChanged;
+ SetInheritedBindingContext(source, webview.BindingContext);
+ }
+ });
+
+ static readonly BindablePropertyKey CanGoBackPropertyKey = BindableProperty.CreateReadOnly("CanGoBack", typeof(bool), typeof(WebView), false);
+
+ public static readonly BindableProperty CanGoBackProperty = CanGoBackPropertyKey.BindableProperty;
+
+ static readonly BindablePropertyKey CanGoForwardPropertyKey = BindableProperty.CreateReadOnly("CanGoForward", typeof(bool), typeof(WebView), false);
+
+ public static readonly BindableProperty CanGoForwardProperty = CanGoForwardPropertyKey.BindableProperty;
+
+ public bool CanGoBack
+ {
+ get { return (bool)GetValue(CanGoBackProperty); }
+ internal set { SetValue(CanGoBackPropertyKey, value); }
+ }
+
+ public bool CanGoForward
+ {
+ get { return (bool)GetValue(CanGoForwardProperty); }
+ internal set { SetValue(CanGoForwardPropertyKey, value); }
+ }
+
+ [TypeConverter(typeof(WebViewSourceTypeConverter))]
+ public WebViewSource Source
+ {
+ get { return (WebViewSource)GetValue(SourceProperty); }
+ set { SetValue(SourceProperty, value); }
+ }
+
+ public void Eval(string script)
+ {
+ EventHandler<EventArg<string>> handler = EvalRequested;
+ if (handler != null)
+ handler(this, new EventArg<string>(script));
+ }
+
+ public void GoBack()
+ {
+ EventHandler handler = GoBackRequested;
+ if (handler != null)
+ handler(this, EventArgs.Empty);
+ }
+
+ public void GoForward()
+ {
+ EventHandler handler = GoForwardRequested;
+ if (handler != null)
+ handler(this, EventArgs.Empty);
+ }
+
+ public event EventHandler<WebNavigatedEventArgs> Navigated;
+
+ public event EventHandler<WebNavigatingEventArgs> Navigating;
+
+ protected override void OnBindingContextChanged()
+ {
+ base.OnBindingContextChanged();
+
+ WebViewSource source = Source;
+ if (source != null)
+ {
+ SetInheritedBindingContext(source, BindingContext);
+ }
+ }
+
+ protected override void OnPropertyChanged(string propertyName)
+ {
+ if (propertyName == "BindingContext")
+ {
+ WebViewSource source = Source;
+ if (source != null)
+ SetInheritedBindingContext(source, BindingContext);
+ }
+
+ base.OnPropertyChanged(propertyName);
+ }
+
+ protected void OnSourceChanged(object sender, EventArgs e)
+ {
+ OnPropertyChanged(SourceProperty.PropertyName);
+ }
+
+ internal event EventHandler<EventArg<string>> EvalRequested;
+
+ internal event EventHandler GoBackRequested;
+
+ internal event EventHandler GoForwardRequested;
+
+ internal void SendNavigated(WebNavigatedEventArgs args)
+ {
+ EventHandler<WebNavigatedEventArgs> handler = Navigated;
+ if (handler != null)
+ handler(this, args);
+ }
+
+ internal void SendNavigating(WebNavigatingEventArgs args)
+ {
+ EventHandler<WebNavigatingEventArgs> handler = Navigating;
+ if (handler != null)
+ handler(this, args);
+ }
+ }
+} \ No newline at end of file