Как я получу сброс медиа на медиаэлементе в wpf? - PullRequest
1 голос
/ 01 марта 2012

Я работаю с медиаэлементом в wpf, но проблема в том, что я не могу сбросить медиа на медийный элемент. Может кто-нибудь сказать мне решение. Следующий код является кодом файла .cs. Я установил значение свойства drop drop = 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; 
    }

1 Ответ

3 голосов
/ 01 марта 2012

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

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

Она не позволит сбросить.Теперь следующее

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

Разрешит отбрасывание.

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

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

Решение - обработать drop на родительском контейнере MediaElement.

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

EDIT.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...