SignatureEditor.xaml.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 PRS.Mobile
  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. _frame.Background = new SolidColorBrush(Color.LightGray);
  24. signaturePad.IsVisible = false;
  25. _preview.Source = ImageSource.FromStream(() => { return new MemoryStream(data); });
  26. _preview.IsVisible = true;
  27. _label.IsVisible = false;
  28. }
  29. else
  30. {
  31. _frame.Background = new SolidColorBrush(Color.LightYellow);
  32. _preview.IsVisible = false;
  33. _preview.Source = null;
  34. signaturePad.IsVisible = true;
  35. signaturePad.Clear();
  36. _label.IsVisible = true;
  37. }
  38. }
  39. public byte[] Save()
  40. {
  41. signaturePad.Save();
  42. if (signaturePad.ImageSource is StreamImageSource source)
  43. {
  44. Task<Stream> task = source.Stream(System.Threading.CancellationToken.None);
  45. Stream stream = task.Result;
  46. byte[] bytes = new byte[stream.Length];
  47. stream.Read(bytes, 0, bytes.Length);
  48. Load(bytes);
  49. return bytes;
  50. }
  51. return new byte[] { };
  52. }
  53. public SignatureEditor()
  54. {
  55. InitializeComponent();
  56. Load(null);
  57. }
  58. private void SignaturePad_OnStrokeCompleted(object sender, EventArgs e)
  59. {
  60. Changed?.Invoke(this,new SignatureEditorChangedEventArgs());
  61. }
  62. }
  63. }