C# 如何实现视频而不是图像的拖放?

C# 如何实现视频而不是图像的拖放?,c#,xaml,uwp,C#,Xaml,Uwp,我似乎无法实现视频文件(.mp4)的拖放功能,只有图像。每次我试图拖动视频时,程序都会崩溃。这是我的下拉画布: private async void mainCanvas_Drop(object sender, DragEventArgs e) { Image img = new Image(); img.Width = 200; img.Height = 150; BitmapImage bm = new BitmapIm

我似乎无法实现视频文件(.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);
        }

    }

您不能将视频作为源设置为
BitmapImage

BitmapImage bm=新的BitmapImage(); 等待bm.SetSourceAsync(流)

您需要使用
MediaPlayerElement
播放视频。看一看这张照片

编辑 我必须删除图像的拖放。有没有一种方法可以检测到 Im投放的项目是图像还是视频


好的,所以我设法让它,我可以拖放mediaelement(视频)在。但要做到这一点,我必须删除拖放图像。有没有办法检测Im投放的项目是图像还是视频?编辑:我如何粘贴我当前的代码?你可以随时检查存储文件的文件类型,并基于此处理你的代码。很抱歉,我真的不知道如何粘贴。哈哈,你介意帮我吗?好的,当然。我将把它添加到我的回答中。我已经添加了解决方案
    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);
                }
            }
        }
    }