SignaturePadWindow.xaml.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. namespace InABox.DynamicGrid
  23. {
  24. /// <summary>
  25. /// Interaction logic for SignaturePadWindow.xaml
  26. /// </summary>
  27. public partial class SignaturePadWindow : ThemableWindow
  28. {
  29. public SignaturePadWindow(ImageSource? source, bool hasName = false)
  30. {
  31. InitializeComponent();
  32. if (!hasName)
  33. {
  34. NameContainer.Visibility = Visibility.Collapsed;
  35. }
  36. if(source != null)
  37. {
  38. Editor.Children.Add(new Image
  39. {
  40. Source = source
  41. });
  42. }
  43. IsEmpty = source == null;
  44. }
  45. private bool IsEmpty;
  46. public BitmapSource? Image { get; private set; }
  47. public string SignatureName => NameEditor.Text;
  48. private void OK_Click(object sender, RoutedEventArgs e)
  49. {
  50. if (IsEmpty)
  51. {
  52. Image = null;
  53. }
  54. else
  55. {
  56. var rtb = new RenderTargetBitmap(400, 400, 96, 96, PixelFormats.Default);
  57. rtb.Render(Editor);
  58. using (var ms = new MemoryStream())
  59. {
  60. var encoder = new PngBitmapEncoder();
  61. encoder.Frames.Add(BitmapFrame.Create(rtb));
  62. encoder.Save(ms);
  63. Image = ImageUtils.BitmapImageFromStream(ms);
  64. }
  65. }
  66. DialogResult = true;
  67. }
  68. private void Cancel_Click(object sender, RoutedEventArgs e)
  69. {
  70. DialogResult = false;
  71. }
  72. private void Clear_Click(object sender, RoutedEventArgs e)
  73. {
  74. Editor.Strokes.Clear();
  75. Editor.Children.Clear();
  76. IsEmpty = true;
  77. }
  78. private void Editor_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
  79. {
  80. IsEmpty = false;
  81. }
  82. }
  83. }