ExtWebView
My custom WebView. It has a HTML string property. This was very useful to draw my chart :) a simple HTML file with some embedded Javascript to draw the shapes. It was the faster way for me to make a cross pie chart control. When the HTML property has changed, the source of the WebView gets updated.
//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// <copyright file=“ExtWebView.cs“ company=“Krossapp“>
// Copyright (c) Krossapp. All rights reserved.
// </copyright>
// <author>Nicolas Krier</author>
//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
namespace SDF.XForm.Controls
{
#region Using
using System.Diagnostics.CodeAnalysis;
using System.Windows.Input;
using Xamarin.Forms;
#endregion
/// <summary>
/// Web view.
/// </summary>
public class ExtWebView : WebView
{
#region Bindable property
/// <summary>
/// The html property.
/// </summary>
[SuppressMessage(“StyleCop.CSharp.MaintainabilityRules“, “SA1401:FieldsMustBePrivate“, Justification = “Reviewed.“)]
public static BindableProperty HtmlProperty = BindableProperty.Create<ExtWebView, string>(x => x.Html, null, BindingMode.OneWay, propertyChanged: WhenHtmlChanged);
/// <summary>
/// The command clicked property.
/// </summary>
[SuppressMessage(“StyleCop.CSharp.MaintainabilityRules“, “SA1401:FieldsMustBePrivate“, Justification = “Reviewed.“)]
public static BindableProperty Command = BindableProperty.Create<ExtWebView, ICommand>(x => x.CommandClicked, null);
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref=“ExtWebView“/> class.
/// </summary>
public ExtWebView()
: base()
{
this.HandleTapEvent();
}
#endregion
#region Property
/// <summary>
/// Gets or sets the html.
/// </summary>
/// <value>The html.</value>
public string Html
{
get { return (string)this.GetValue(HtmlProperty); }
set { this.SetValue(HtmlProperty, value); }
}
/// <summary>
/// Gets or sets the command clicked.
/// </summary>
/// <value>The command clicked.</value>
public ICommand CommandClicked
{
get { return (ICommand)this.GetValue(Command); }
set { this.SetValue(Command, value); }
}
#endregion
/// <summary>
/// Raises the html changed event.
/// </summary>
/// <param name=“sender“>The sender.</param>
/// <param name=“oldValue“>Old value.</param>
/// <param name=“newValue“>New value.</param>
private static void WhenHtmlChanged(BindableObject sender, string oldValue, string newValue)
{
WebView ctrl = (WebView)sender;
ctrl.Source = new HtmlWebViewSource() { Html = newValue };
}
/// <summary>
/// Handle the tap event : the click.
/// </summary>
private void HandleTapEvent()
{
/*
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (sender, args) =>
{
if (args != null && this.CommandClicked != null && this.CommandClicked.CanExecute(args))
{
this.CommandClicked.Execute(args);
}
};
this.GestureRecognizers.Add(tapGestureRecognizer);
*/
}
}
}