SignatureEditor.xaml.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Xamarin.Forms;
  8. using Xamarin.Forms.Xaml;
  9. namespace comal.timesheets
  10. {
  11. public class SignatureEditorChangedEventArgs : EventArgs
  12. {
  13. }
  14. public delegate void SignatureEditorChangedEvent(object sender, SignatureEditorChangedEventArgs args);
  15. [XamlCompilation(XamlCompilationOptions.Compile)]
  16. public partial class SignatureEditor
  17. {
  18. public event SignatureEditorChangedEvent Changed;
  19. public void Load(byte[] data)
  20. {
  21. if (data?.Any() == true)
  22. {
  23. signaturePad.IsVisible = false;
  24. _preview.Source = ImageSource.FromStream(() => { return new MemoryStream(data); });
  25. _preview.IsVisible = true;
  26. }
  27. else
  28. {
  29. _preview.IsVisible = false;
  30. _preview.Source = null;
  31. signaturePad.IsVisible = true;
  32. signaturePad.Clear();
  33. }
  34. }
  35. public byte[] Save()
  36. {
  37. signaturePad.Save();
  38. if (signaturePad.ImageSource is StreamImageSource source)
  39. {
  40. Task<Stream> task = source.Stream(System.Threading.CancellationToken.None);
  41. Stream stream = task.Result;
  42. byte[] bytes = new byte[stream.Length];
  43. stream.Read(bytes, 0, bytes.Length);
  44. return bytes;
  45. }
  46. return new byte[] { };
  47. }
  48. public SignatureEditor()
  49. {
  50. InitializeComponent();
  51. Load(null);
  52. }
  53. private void SignaturePad_OnStrokeCompleted(object sender, EventArgs e)
  54. {
  55. Changed?.Invoke(this,new SignatureEditorChangedEventArgs());
  56. }
  57. }
  58. }