SignaturePadWindow.xaml.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using InABox.WPF;
  2. using InABox.Wpf;
  3. using Syncfusion.UI.Xaml.ImageEditor;
  4. using Syncfusion.UI.Xaml.ImageEditor.Enums;
  5. using System.Collections.Generic;
  6. using System.Drawing;
  7. using System.Drawing.Design;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows;
  13. using System.Windows.Controls;
  14. using System.Windows.Data;
  15. using System.Windows.Documents;
  16. using System.Windows.Input;
  17. using System.Windows.Media;
  18. using System.Windows.Media.Imaging;
  19. using System.Windows.Shapes;
  20. using Color = System.Windows.Media.Color;
  21. using Image = System.Windows.Controls.Image;
  22. using System;
  23. namespace InABox.DynamicGrid
  24. {
  25. /// <summary>
  26. /// Interaction logic for SignaturePadWindow.xaml
  27. /// </summary>
  28. public partial class SignaturePadWindow : ThemableWindow
  29. {
  30. public event Func<string, bool>? ValidateName;
  31. public SignaturePadWindow(ImageSource? source, bool hasName = false)
  32. {
  33. InitializeComponent();
  34. if (!hasName)
  35. {
  36. NameContainer.Visibility = Visibility.Collapsed;
  37. }
  38. if(source != null)
  39. {
  40. Editor.Children.Add(new Image
  41. {
  42. Source = source
  43. });
  44. }
  45. IsEmpty = source == null;
  46. }
  47. private bool IsEmpty;
  48. public BitmapSource? Image { get; private set; }
  49. public string SignatureName => NameEditor.Text;
  50. private void OK_Click(object sender, RoutedEventArgs e)
  51. {
  52. if(ValidateName?.Invoke(SignatureName) == false)
  53. {
  54. return;
  55. }
  56. if (IsEmpty)
  57. {
  58. Image = null;
  59. }
  60. else
  61. {
  62. var rtb = new RenderTargetBitmap(400, 400, 96, 96, PixelFormats.Default);
  63. rtb.Render(Editor);
  64. using (var ms = new MemoryStream())
  65. {
  66. var encoder = new PngBitmapEncoder();
  67. encoder.Frames.Add(BitmapFrame.Create(rtb));
  68. encoder.Save(ms);
  69. Image = ImageUtils.BitmapImageFromStream(ms);
  70. }
  71. }
  72. DialogResult = true;
  73. }
  74. private void Cancel_Click(object sender, RoutedEventArgs e)
  75. {
  76. DialogResult = false;
  77. }
  78. private void Clear_Click(object sender, RoutedEventArgs e)
  79. {
  80. Editor.Strokes.Clear();
  81. Editor.Children.Clear();
  82. IsEmpty = true;
  83. }
  84. private void Editor_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
  85. {
  86. IsEmpty = false;
  87. }
  88. }
  89. }