using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace comal.timesheets { public class SignatureEditorChangedEventArgs : EventArgs { } public delegate void SignatureEditorChangedEvent(object sender, SignatureEditorChangedEventArgs args); [XamlCompilation(XamlCompilationOptions.Compile)] public partial class SignatureEditor { public event SignatureEditorChangedEvent Changed; public void Load(byte[] data) { if (data?.Any() == true) { signaturePad.IsVisible = false; _preview.Source = ImageSource.FromStream(() => { return new MemoryStream(data); }); _preview.IsVisible = true; } else { _preview.IsVisible = false; _preview.Source = null; signaturePad.IsVisible = true; signaturePad.Clear(); } } public byte[] Save() { signaturePad.Save(); if (signaturePad.ImageSource is StreamImageSource source) { Task task = source.Stream(System.Threading.CancellationToken.None); Stream stream = task.Result; byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); return bytes; } return new byte[] { }; } public SignatureEditor() { InitializeComponent(); Load(null); } private void SignaturePad_OnStrokeCompleted(object sender, EventArgs e) { Changed?.Invoke(this,new SignatureEditorChangedEventArgs()); } } }