DFImageControl.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. public class DFImageControl : DynamicFormControl<DFLayoutImage>
  16. {
  17. private static readonly Dictionary<Guid, BitmapImage?> images = new();
  18. protected override FrameworkElement Create()
  19. {
  20. var image = new Image();
  21. if (Control.Image.IsValid())
  22. {
  23. if (images.TryGetValue(Control.Image.ID, out var bitmapImage))
  24. {
  25. image.Source = bitmapImage;
  26. }
  27. new Client<Document>().Query(
  28. new Filter<Document>(x => x.ID).IsEqualTo(Control.Image.ID),
  29. Columns.None<Document>().Add(x => x.ID, x => x.Data),
  30. null,
  31. null,
  32. (data, error) =>
  33. {
  34. var source = ImageUtils.LoadImage(data?.Rows.FirstOrDefault()?.Get<Document, byte[]>(x => x.Data));
  35. images[Control.Image.ID] = source;
  36. Dispatcher.Invoke(() => { image.Source = source; });
  37. }
  38. );
  39. }
  40. image.Stretch = Stretch.Uniform;
  41. return image;
  42. }
  43. }