Как реализовать Drag and Drop для видео вместо изображения? - PullRequest
0 голосов
/ 10 ноября 2019

Не могу реализовать функцию перетаскивания для видеофайлов (.mp4), только для изображений. Каждый раз, когда я пытаюсь перетащить видео, происходит сбой программы. Вот холст капли, который у меня был:

private async void mainCanvas_Drop(object sender, DragEventArgs e)
    {
        Image img = new Image();
        img.Width = 200;
        img.Height = 150;
        BitmapImage bm = new BitmapImage();
        if (e.DataView.Contains(StandardDataFormats.StorageItems))
        {
            var storageItems = await e.DataView.GetStorageItemsAsync();
            foreach (StorageFile file in storageItems)
            {
                var stream = await
               file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                await bm.SetSourceAsync(stream);
                img.Source = bm;
            }
            img.RenderTransform = new CompositeTransform();
            img.ManipulationMode = ManipulationModes.All;
            img.ManipulationStarted += mPlayer_ManipulationStarted;
            img.ManipulationCompleted += mPlayer_ManipulationCompleted;
            img.ManipulationDelta += mPlayer_ManipulationDelta;
            mainCanvas.Children.Add(img);
            Canvas.SetLeft(img, e.GetPosition(mainCanvas).X);
            Canvas.SetTop(img, e.GetPosition(mainCanvas).Y);
        }

    }

1 Ответ

1 голос
/ 10 ноября 2019

Невозможно установить видео в качестве источника на BitmapImage.

BitmapImage bm = new BitmapImage ();await bm.SetSourceAsync (stream);

Для воспроизведения видео необходимо использовать MediaPlayerElement. Взгляните на пример .

Редактировать

Я должен удалить перетаскивание для изображения. Есть ли способ определить, является ли предмет, который я выбрасываю, изображением или видео?

    private async void mainGrid_Drop(object sender, DragEventArgs e)
    {
        Image img = new Image();
        img.Width = 200;
        img.Height = 150;
        BitmapImage bm = new BitmapImage();
        MediaPlayerElement mediaPlayerElement = new MediaPlayerElement();
        if (e.DataView.Contains(StandardDataFormats.StorageItems))
        {
            var storageItems = await e.DataView.GetStorageItemsAsync();
            foreach (StorageFile file in storageItems)
            {
                if (file.FileType == ".mp4")
                {
                    mediaPlayerElement.Source = MediaSource.CreateFromStorageFile(file);
                    mainGrid.Children.Add(mediaPlayerElement);
                }
                else
                {
                    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                    await bm.SetSourceAsync(stream);
                    img.Source = bm;
                    mainGrid.Children.Add(img);
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...