2012-03-01 3 views
1

Я работаю с mediaelement в wpf, но проблема в том, что я не могу отказаться от медиа на medaiaelement. может кто-нибудь сказать мне решение. Следующий код - код файла .cs. Я установил allow drop property = trueКак я могу получить информацию о медиа-элементе в wpf?

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; 
    } 

ответ

3

Попробовал сам. На самом деле это будет работать после того, как вы там что-нибудь сыграете. Вот точка: предположим, у нас есть сетки:

<Grid AllowDrop="True"></Grid> 

Это не позволит капли. Теперь следующий

<Grid Background="Transparent" AllowDrop="True"></Grid> 

Позволит капли.

Первая сетка не имеет фона вообще, так что на самом деле нет никакого способа отбросить что-либо на ней - нет сетки. А во втором случае есть фон сетки, хотя мы не можем его увидеть.

То же самое относится к MediaElement. К сожалению, у него нет никаких свойств фона или содержимого, поэтому он не позволит отказаться, пока вы не начнете что-то там играть.

Решение состоит в том, чтобы обрабатывать падение на родительском контейнере MediaElement.

Кстати, не забудьте установить LoadedBehavior = «Manual» для MediaElement, чтобы он воспроизводил сброшенный файл.

EDIT.

Вот объяснение, почему MediaElement не позволяет отказаться, пока в него не будет загружен контент.

Каждый компонент WPF на самом деле состоит из некоторых других основных элементов: Границы, Сетки, ContentPresenters и т. Д. Так что что-то внутри MediaElement обрабатывает падение. Я не могу сказать вам, что это за элемент, потому что шаблон MediaElement недоступен. Но на самом деле не имеет значения, что именно элемент, который обрабатывает перетаскивание туда. Важно то, что в области MediaElement нет ничего существенного, пока вы не загрузите контент на нем - точно так же, как в случае с моим примером с Grid в начале этого сообщения. Я имею в виду, что когда вы перемещаете курсор мыши над его областью, между курсором и контейнером MediaElement нет ничего. Попробуйте обработать событие MouseDown: результат будет таким же - он не срабатывает, пока вы не загрузите какое-либо видео. Зачем? Потому что нечего возбуждать. Ничто не может ничего поднять. Как я уже упоминал ранее, существует большая разница между Background = "{x: Null}" и Background = "Transparent": в первом случае нет фоновой кисти, нет фона, но во втором случае есть один. Почувствуйте разницу.

+0

благодарит за ответ, но не работает, загрузка, но не играет – havan

+1

Работает для меня. Замените первую строку обработчика Drop String [] FileName = (String []) e.Data.GetData (DataFormats.FileDrop); – EvAlex

+0

k его work.but как это работает в первый раз.can u скажите мне процесс – havan

Смежные вопросы