Изменить источник медиаэлемента на основе действий - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть проекты WPF 4 и VB.net 2010. Я играю видео в одном медиаэлементе. Вот что мне нужно сделать:

Когда открывается первое окно, у меня нормально воспроизводится первое видео. Однако именно после воспроизведения этого видео у меня возникают проблемы с выяснением того, как сделать следующее.

  1. Мне нужно, чтобы источник видео менялся сразу после однократного воспроизведения любого видео, и мне нужно, чтобы это видео (далее именуемое "окружающее" видео) зацикливалось вечно.

  2. Когда происходит определенное событие, мне нужно снова изменить источник видео, воспроизвести его один раз, а затем вернуться к цикличному воспроизведению окружающего видео в шаге 1.

Однако, вот в чем проблема. Многие из триггеров видео находятся внутри операторов If-Then или Select Case в коде, поэтому я не использую исключительно простые события WPF, такие как «MouseUp» или «MouseEnter».

Кроме того, по соображениям производительности все видео должны воспроизводиться в одном и том же медиаэлементе.

Заранее спасибо!

Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Источник медиаэлемента является DependencyProperty, так как любые изменения в нем будут немедленно отражены в пользовательском интерфейсе.

Если вы объедините это с MediaEnded событие, которое запускается, вы можете установить источник, и ваша проблема будет решена.

Когда вы нажимаете триггеры в коде, вы можете либо вызвать метод, либо вызвать событие.Вам придется использовать некоторое подобие State Pattern , чтобы иметь дело с другой логикой.Кроме того, посмотрите Программирование без Ifs , это потрясающее введение о том, как избежать безумной условной логики.

0 голосов
/ 25 апреля 2011

Я установил для медиаэлемента LoadedBehavior значение «Play», а для Unloadedbehavior - «Stop», затем я смог просто изменить источник самого медиаэлемента в коде и поместить нужное видео после каждого видео в событие MediaEnded.

Оказывается, что MediaEnded не запускается автоматически, когда для LoadedBehavior установлено значение «Вручную», если в коде явно не вызывается «Стоп».

Я ненавижу принимать мои собственные ответы, поэтому Нейт Нунен получает награду (изначально он шел по правому переулку)! TY!

...