I am working with mediaelement in wpf, but the problem is I can’t drop media on medaiaelement.
can anyone tell me the solution.the following code is .cs file code. I set allow drop property= true
private void mediaElement1_Drop(object sender, System.Windows.DragEventArgs e)
{
String[] FileName = (String[])e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop, true);
if (FileName.Length > 0)
{
String VideoPath = FileName[0].ToString();
mediaElement1.Source = new Uri(VideoPath);
mediaElement1.Play();
}
e.Handled = true;
}
Tried it myself. Actually it will work after you play something there.
Here’s the point: assume we have a Grid:
It won’t allow drop.
Now the following
Will allow drop.
The first Grid doesn’t have background at all, so actually there’s no way to drop anything on it – there’s no grid. And in second case there is grid’s background even though we can’t see it.
The same thing applies to MediaElement. Unfortunately it doesn’t have any Background or Content property, so it won’t allow drop until you start playing something there.
Solution is to handle drop on MediaElement parent container.
By the way, don’t forget to set LoadedBehavior=”Manual” for MediaElement so that it will play dropped file.
EDIT.
Here is explanation why MediaElement doesn’t allow drop till any content was loaded in it.
Every WPF component is in fact composed of some other basic elements: Borders, Grids, ContentPresenters etc. So something inside the MediaElement handles drop. I cannot tell you what element it is because MediaElement’s Template is not accessible. But it really doesn’t matter what exactly is the element that handles drag and drop there. What does matter is that there’s is nothing material in MediaElement’s area until you load content on it – just like in case of my example with Grid at the beginning of this post. I mean that when you move mouse cursor over it’s area there is nothing between cursor and MediaElement’s container. Try to handle MouseDown event: result will be the same – it won’t fire until you load any video. Why? Because there is nothing to raise event. Nothing cannot raise anything.
As I mentioned before there is great difference between Background=”{x:Null}” and Background=”Transparent”: in first case there’s no background brush, no background, but in second case there is one. Feel the difference.