Mevy で使用している画像を保存するポップアップメニューを表示するコード。
多少余計なものも混じってますが参考に。
private async void Image_Holding(object sender, HoldingRoutedEventArgs e) { e.Handled = true; if (e.HoldingState != HoldingState.Started) { return; } await ImageMenu(e.GetPosition(null), (Image)sender); } private async void Image_RightTapped(object sender, RightTappedRoutedEventArgs e) { e.Handled = true; if (e.PointerDeviceType != PointerDeviceType.Mouse) { return; } await ImageMenu(e.GetPosition(null), (Image)sender); } private async Task ImageMenu(Point touchedPoint, Image image) { var resourceLoader = new ResourceLoader(); var menu = new PopupMenu(); // 画像を保存 menu.Commands.Add(new UICommand(resourceLoader.GetString("Save"), async _ => { var bmp = (BitmapImage)image.Source; var filename = Path.GetFileName(bmp.UriSource.AbsolutePath.Replace(":large", "")); if (string.IsNullOrEmpty(filename)) { filename = "image"; } var extension = Path.GetExtension(filename); var client = new HttpClient(); var response = await client.GetAsync(bmp.UriSource); if (string.IsNullOrEmpty(extension)) { extension = response.Content.Headers.ContentType.MediaType.Replace("image/", "."); } var picker = new FileSavePicker(); picker.FileTypeChoices.Add(extension.Substring(1).ToUpper(), new List<string>() { extension }); picker.SuggestedFileName = filename; picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; var file = await picker.PickSaveFileAsync(); if (file == null) { return; } var buffer = await response.Content.ReadAsBufferAsync(); await FileIO.WriteBufferAsync(file, buffer); })); var length = 30; await menu.ShowForSelectionAsync(new Rect(touchedPoint.X - length, touchedPoint.Y - length, length * 2, length * 2)); } |