Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 375 376 377 378 379 380 < 381 > 382 383 384 385 386 387 .. 473 >> Следующая

Простейший дескриптор MediaElement — это все, что вам нужно для воспроизведения звука. Например, если вы добавляете такую разметку к вашему пользовательскому интерфейсу:
<MediaElement Source="test.mp3"></MediaElement>
то аудиофайл test.mp3 будет воспроизведен немедленно после загрузки (что более или менее совпадет с загрузкой окна).
Программное воспроизведение аудио
Обычно в тонком управлении воспроизведением необходимости нет. Например, может потребоваться, чтобы в определенный момент оно было запущено, постоянно воспроизводилось повторно и т.д. Один способ достичь этого заключается в применении методов класса MediaElement в надлежащий момент.
Поведение MediaElement при запуске определяется его свойством LoadedBehavior, которое является одним из нескольких свойств, которые добавлены в классе MediaElement и которых нет в классе MediaPlayer. Свойство LoadedBehavior принимает любое значение из перечисления MediaState. По умолчанию оно равно Play, но вы также можете использовать Manual — в этом случае файл загружается, а потом уже ваш код отвечает за запуск воспроизведения в нужный момент. Другое значение этого свойства — Pause, установка которого приостанавливает воспроизведение, но не позволяет вам использовать методы воспроизведения. (Вместо этого вам придется запускать воспроизведение с помощью триггеров и раскадровки, что будет описано в следующем разделе.)
На заметку! Класс MediaElement также предоставляет свойство UnloadedBehavior, определяющее, что произойдет при выгрузке элемента. В данном случае единственным осмысленным выбором может быть Close, поскольку это закроет файл и освободит все системные ресурсы.
Итак, чтобы воспроизвести аудиофайл программно, вы должны начать с изменения LoadedBehavior, как показано ниже:
<MediaElement Source="test.mp3" LoadedBehavior="Manual" Name="media"></MediaElement>
Кроме того, вы должны выбрать имя, чтобы можно было взаимодействовать с медиа-элементом в программном коде. Обычно взаимодействие состоит из вызова очевидных методов Play() , Pause() и Stop() . Также вы можете установить Position, чтобы перемещаться по аудиозаписи. Ниже приведен простой обработчик событий, который “перематывает” запись к началу и начинает воспроизведение:
private void cmdPlay_Click(object sender, RoutedEventArgs e)
{
media.Position = TimeSpan.Zero; media.Play();
}
Book_Pro_WPF-2.mdb 743 19.05.2008 18:11:22
744 Глава 22
Если этот код запускается во время воспроизведения, то его первая строка сбросит позицию на начало, и воспроизведение начнется оттуда. Вторая строка не будет иметь эффекта, поскольку медиафайл уже воспроизводится. Если же вы попытаетесь применить этот код в отношении MediaElement, у которого свойство LoadedBehavior не установлено равным Manual, то получите исключение.
На заметку! В типичном медиапроигрывателе вы можете выполнять типовые команды вроде воспроизведения, паузы и останова более чем одним способом. Очевидно, что это отличное место для того, чтобы применить модель команд WPF. Фактически, для этого существует класс команд, который уже включает некоторую удобную инфраструктуру, и этот класс — System. Windows.lnput.MediaCommands. Однако MediaElement не имеет никаких привязок команд по умолчанию, которые поддерживают класс MediaCommands. Другими словами, на вашей совести лежит задача написания логики обработки событий, которая реализует каждую команду и вызовет соответствующий метод MediaElement. В ваших силах организовать код так, чтобы несколько элементов пользовательского интерфейса были привязаны к одной и той же команде для сокращения дублирования кода. В главе 10 о командах рассказано подробнее.
Обработка событий
MediaElement не возбуждает исключения, если не может найти или загрузить файл. Вместо этого вам предлагается обработать событие MediaFailed. К счастью, это простая задача. Просто подкорректируйте дескриптор MediaElement:
<MediaElement ... MediaFailed="media_MediaFailed"></MediaElement>
И в обработчике событий используйте свойство ExceptionRoutedEventArgs. ErrorException, чтобы получить объект исключения, описывающий проблему:
private void media_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
lblErrorText.Content = e.ErrorException.Message;
}
Воспроизведение аудио с помощью триггеров
До сих пор вы не получили никаких преимуществ от перехода от класса MediaPlayer к MediaElement (помимо поддержки видео, о чем мы поговорим в этой главе позже). Однако, используя MediaElement, вы также получаете возможность управлять аудио декларативно, через код разметки XAML, вместо программного кода. Это делается с помощью триггеров и раскадровок, с которыми вы знакомы из главы 21, где шла речь об анимации. Единственный новый ингредиент — MediaTimeline, который управляет временной шкалой вашего аудио- или видеофайла, и работает совместно с MediaElement для координации воспроизведения. MediaTimeline наследуется от Timeline и добавляет свойство Source, идентифицирующее аудиофайл, который вы хотите воспроизвести.
Следующий код разметки демонстрирует простой пример. Он использует действие BeginStoryboard для запуска воспроизведения звука, когда выполняется щелчок на кнопке. (Понятно, что вы можете с тем же успехом отреагировать и на другие события мыши и клавиатуры.)
Предыдущая << 1 .. 375 376 377 378 379 380 < 381 > 382 383 384 385 386 387 .. 473 >> Следующая