using System.IO; using System.Linq; using InABox.Clients; using InABox.Core; using Xamarin.Forms; namespace PRS.Mobile { public class DigitalFormImage : Image, IDigitalFormControl { private DFLayoutImage _definition; public DFLayoutImage Definition { get => _definition; set { _definition = value; Initialize(value ?? new DFLayoutImage()); } } public DigitalFormImage() { MinimumHeightRequest = 150; MinimumWidthRequest = 150; Aspect = Aspect.AspectFit; HorizontalOptions = LayoutOptions.FillAndExpand; VerticalOptions = LayoutOptions.FillAndExpand; GestureRecognizers.Add( new TapGestureRecognizer { Command = new Command(OnTap), NumberOfTapsRequired = 1 } ); } private void OnTap(object obj) { if (Source != null) { ImageViewerPage viewer = new ImageViewerPage(Source, null); Navigation.PushAsync(viewer); } } private void Initialize(DFLayoutImage image) { var row = new Client().Query( new Filter(x => x.ID).IsEqualTo(image.Image.ID) ).Rows.FirstOrDefault(); if (row != null) { byte[] data = row.Get(x => x.Data); Source = ImageSource.FromStream(() => new MemoryStream(data)); } } } }