private async void ImageCropperPreview_ManipulationCompleted(object sender, Windows.UI.Xaml.Input.ManipulationCompletedRoutedEventArgs e)
 {
     await SetSelectedRegionInViewModel();
     await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
     {
         ImageCropperPreview.Focus(FocusState.Programmatic);
     });
 }
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // METHODS //////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        private async void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
            case nameof(ViewModel.PreviewFile):
                await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, async() =>
                {
                    await ImageCropperPreview.LoadImageFromFile(ViewModel.PreviewFile);
                    ImageCropperPreview_ManipulationCompleted(ImageCropperPreview, null);
                });

                break;

            case nameof(ViewModel.SelectedAspectRatioValue):
                await RunOnUIThreadAsync(CoreDispatcherPriority.High, () =>
                {
                    ImageCropperPreview.AspectRatio = ViewModel.SelectedAspectRatioValue;
                });

                await Task.Delay(500);          // ugh... 😞
                await SetSelectedRegionInViewModel();

                break;

            case nameof(ViewModel.MinLength):
                await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
                {
                    ImageCropperPreview.MinCroppedPixelLength = ViewModel.MinLength.Pixels;
                });

                break;

            case nameof(ViewModel.SelectedX):
                await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
                {
                    Rect newRect = ImageCropperPreview.CroppedRegion;
                    newRect.X    = ViewModel.SelectedX.Pixels;

                    ImageCropperPreview.TrySetCroppedRegion(newRect);
                });

                break;

            case nameof(ViewModel.SelectedY):
                await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
                {
                    Rect newRect = ImageCropperPreview.CroppedRegion;
                    newRect.Y    = ViewModel.SelectedY.Pixels;

                    ImageCropperPreview.TrySetCroppedRegion(newRect);
                });

                break;

            case nameof(ViewModel.SelectedWidth):
                await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
                {
                    Rect newRect   = ImageCropperPreview.CroppedRegion;
                    newRect.Width  = ViewModel.SelectedWidth.Pixels;
                    newRect.Height = ViewModel.SelectedHeight.Pixels;
                    newRect.X      = ViewModel.SelectedX.Pixels;
                    newRect.Y      = ViewModel.SelectedY.Pixels;

                    if (ViewModel.IsFixedAspectRatioSelected)
                    {
                        // aspect ratio needs to be *exactly* right, so it sometimes has to be recalculated
                        ImageCropperPreview.AspectRatio = newRect.Width / newRect.Height;
                    }

                    ImageCropperPreview.TrySetCroppedRegion(newRect);
                });

                break;

            case nameof(ViewModel.SelectedHeight):
                await RunOnUIThreadAsync(CoreDispatcherPriority.Normal, () =>
                {
                    Rect newRect   = ImageCropperPreview.CroppedRegion;
                    newRect.Width  = ViewModel.SelectedWidth.Pixels;
                    newRect.Height = ViewModel.SelectedHeight.Pixels;
                    newRect.X      = ViewModel.SelectedX.Pixels;
                    newRect.Y      = ViewModel.SelectedY.Pixels;

                    if (ViewModel.IsFixedAspectRatioSelected)
                    {
                        // aspect ratio needs to be *exactly* right, so it sometimes has to be recalculated
                        ImageCropperPreview.AspectRatio = newRect.Width / newRect.Height;
                    }

                    ImageCropperPreview.TrySetCroppedRegion(newRect);
                });

                break;
            }
        }