async void OnManipulableControlManipulationStarted(object sender, ManipulationStartedRoutedEventArgs args) { ManipulableContentControl manipulableControl = sender as ManipulableContentControl; Image image = manipulableControl.Content as Image; if ((ImageType)image.Tag == ImageType.Thumbnail) { // Set tag to transitioning image.Tag = ImageType.Transitioning; // Load the actual bitmap file StorageFile storageFile = manipulableControl.Tag as StorageFile; BitmapSource newBitmap = await LoadBitmapAsync(storageFile); // This is the case for a file that BitmapDecoder can't handle if (newBitmap != null) { // Get the thumbnail from the Image element BitmapSource oldBitmap = image.Source as BitmapSource; // Find a ScaleTransform between old and new double scale = 1; if (oldBitmap.PixelWidth > oldBitmap.PixelHeight) { scale = (double)oldBitmap.PixelWidth / newBitmap.PixelWidth; } else { scale = (double)oldBitmap.PixelHeight / newBitmap.PixelHeight; } // Set properties on the Image element image.Source = newBitmap; image.RenderTransform = new ScaleTransform { ScaleX = scale, ScaleY = scale, }; } image.Tag = ImageType.Full; } }
async void OnFolderListBoxSelectionChanged(object sender, SelectionChangedEventArgs args) { FolderItem folderItem = (sender as ListBox).SelectedItem as FolderItem; if (folderItem == null) { displayBorder.Child = null; return; } if (folderItem.DisplayGrid != null) { displayBorder.Child = folderItem.DisplayGrid; return; } Grid displayGrid = new Grid(); folderItem.DisplayGrid = displayGrid; displayBorder.Child = displayGrid; StorageFolder storageFolder = folderItem.StorageFolder; IReadOnlyList <StorageFile> storageFiles = await storageFolder.GetFilesAsync(); foreach (StorageFile storageFile in storageFiles) { StorageItemThumbnail thumbnail = await storageFile.GetThumbnailAsync(ThumbnailMode.SingleItem); BitmapSource bitmap = await LoadBitmapAsync(thumbnail); if (bitmap == null) { continue; } // Create new Image element to display the thumbnail Image image = new Image { Source = bitmap, Stretch = Stretch.None, Tag = ImageType.Thumbnail }; // Create an initial CompositeTransform for the item CompositeTransform xform = new CompositeTransform(); xform.TranslateX = (displayBorder.ActualWidth - bitmap.PixelWidth) / 2; xform.TranslateY = (displayBorder.ActualHeight - bitmap.PixelHeight) / 2; xform.TranslateX += 256 * (0.5 - rand.NextDouble()); xform.TranslateY += 256 * (0.5 - rand.NextDouble()); // Create the ManipulableContentControl for the Image ManipulableContentControl manipulableControl = new ManipulableContentControl(xform) { Content = image, Tag = storageFile }; manipulableControl.ManipulationStarted += OnManipulableControlManipulationStarted; // Put it in the Grid displayGrid.Children.Add(manipulableControl); } }