DigitalFormImage.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.IO;
  2. using System.Linq;
  3. using InABox.Clients;
  4. using InABox.Core;
  5. using Xamarin.Forms;
  6. namespace PRS.Mobile
  7. {
  8. public class DigitalFormImage : Image, IDigitalFormControl<DFLayoutImage>
  9. {
  10. private DFLayoutImage _definition;
  11. public DFLayoutImage Definition
  12. {
  13. get => _definition;
  14. set
  15. {
  16. _definition = value;
  17. Initialize(value ?? new DFLayoutImage());
  18. }
  19. }
  20. public DigitalFormImage()
  21. {
  22. MinimumHeightRequest = 150;
  23. MinimumWidthRequest = 150;
  24. Aspect = Aspect.AspectFit;
  25. HorizontalOptions = LayoutOptions.FillAndExpand;
  26. VerticalOptions = LayoutOptions.FillAndExpand;
  27. GestureRecognizers.Add(
  28. new TapGestureRecognizer
  29. {
  30. Command = new Command(OnTap),
  31. NumberOfTapsRequired = 1
  32. }
  33. );
  34. }
  35. private void OnTap(object obj)
  36. {
  37. if (Source != null)
  38. {
  39. ImageViewerPage viewer = new ImageViewerPage(Source);
  40. Navigation.PushAsync(viewer);
  41. }
  42. }
  43. private void Initialize(DFLayoutImage image)
  44. {
  45. var row = new Client<Document>().Query(
  46. new Filter<Document>(x => x.ID).IsEqualTo(image.Image.ID)
  47. ).Rows.FirstOrDefault();
  48. if (row != null)
  49. {
  50. byte[] data = row.Get<Document, byte[]>(x => x.Data);
  51. Source = ImageSource.FromStream(() => new MemoryStream(data));
  52. }
  53. }
  54. }
  55. }