DFImageControl.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using InABox.WPF;
  4. using Org.BouncyCastle.Crmf;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Imaging;
  14. namespace InABox.DynamicGrid
  15. {
  16. public class DFImageControl : DynamicFormControl<DFLayoutImage>
  17. {
  18. private static readonly Dictionary<Guid, BitmapImage> images = new();
  19. protected override FrameworkElement Create()
  20. {
  21. var image = new Image();
  22. if (Control.Image.IsValid())
  23. {
  24. if (images.ContainsKey(Control.Image.ID)) image.Source = images[Control.Image.ID];
  25. new Client<Document>().Query(
  26. new Filter<Document>(x => x.ID).IsEqualTo(Control.Image.ID),
  27. new Columns<Document>(x => x.ID, x => x.Data),
  28. null,
  29. (data, error) =>
  30. {
  31. var bytes = data?.Rows.FirstOrDefault()?.Get<Document, byte[]>(x => x.Data);
  32. var source = new BitmapImage();
  33. source.LoadImage(bytes);
  34. images[Control.Image.ID] = source;
  35. Dispatcher.Invoke(() => { image.Source = source; });
  36. }
  37. );
  38. }
  39. image.Stretch = Stretch.Uniform;
  40. return image;
  41. }
  42. }
  43. }