SignaturePadWindow.xaml.cs 2.5 KB

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