Разработка приложений на Silverlight
В теле страницы содержится объект, код которого находится в файле, указанном в элементе:
<param name="source" value="ClientBin/SilverlightApplicationStart.xap"/>
В данном случае - это SilverlightApplicationStart.xap. Для просмотра ресурса достаточно указать в веб-браузере адрес:
http://localhost/SilverlightApplicationStart.Web/SilverlightApplicationStartTestPage.html
Возможно также использование SilverlightApplicationStartTestPage.aspx файла вместо SilverlightApplicationStartTestPage.html. Однако для этого потребуется предварительная регистрация нового веб-сайта как приложения (через панель управления IIS).
3)Добавление анимации. Если между элементами <Grid> </Grid> добавить код, содержащий описание анимации ( Storyboard ) с помощью последовательности трансформаций вращения ( RotateTransform ):
<Grid.RenderTransform> <TransformGroup> <RotateTransform x:Name="WelcomeRotateTransform" Angle="0" /> </TransformGroup> </Grid.RenderTransform> <Grid.Triggers> <EventTrigger RoutedEvent="Grid.Loaded"> <BeginStoryboard> <Storyboard RepeatBehavior="Forever" AutoReverse="True"> <DoubleAnimation Storyboard.TargetName="WelcomeRotateTransform" Storyboard.TargetProperty="Angle" From="0" To="360" Duration="0:0:2" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Grid.Triggers>
то получится интересный эффект циклического вращения предыдущей сцены вокруг левого верхнего угла на 360 градусов вперед-назад.
Задание 2. Разработка Silverlight -медиаплейера Microsoft Visual Web Developer 2008 Express.
1) Простое воспроизведение видео с помощью элемента управления MediaElement.
Создайте новый Silverlight Application проект с именем SLMediaPlayer.
Добавьте описание элемента MediaElement на страницу MainPage.xaml, указав в качестве значения URL его атрибута Source видеофайл, который хотите воспроизвести. Сам видеофайл можно скопировать в \SLMediaPlayer.Web\ClientBin, например, из стандартной коллекции в директории C:\Users\Public\Videos\Sample Videos\.
Рассмотрим пример XAML -кода:
<UserControl x:Class="SLMediaPlayer.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <Grid x:Name="LayoutRoot" Background="White"> <MediaElement Source="Wildlife.wmv" /> </Grid> </UserControl>
Данный код обеспечит автоматическую загрузку и воспроизведение видеоролика.
Размер области воспроизведения мультимедиа определяется следующими правилами:
- Если заданы свойства Height и Width элемента управления MediaElement, MediaElement использует их.
- Если задано одно из этих свойств, элемент управления MediaElement растягивает изображение, сохраняя пропорции.
- Если не заданы ни Height, ни Width, элемент управления MediaElement растягивает изображение до размеров родительского контейнера, сохраняя пропорции.
- Если заданы оба свойства и они превышают размер области просмотра элемента управления Silverlight, MediaElement обрезает видео соответственно размеру области просмотра.
После компиляции и запуска можно будет просмотреть видеоролик в браузере:
2) Расположение содержимого поверх видеоизображения.
В Silverlight можно размещать текст и графические элементы поверх видеоизображения. Ниже представлен пример XAML код для MediaElement, который перекрывается Canvas с прямоугольником и текстовым блоком:
<UserControl x:Class="SLMediaPlayer.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <Grid x:Name="LayoutRoot" Background="White"> <Canvas Margin="50,50,0,0"> <MediaElement Source="Wildlife.wmv" Height="200" Width="200" Stretch="Fill" /> <Rectangle Fill="Black" Height="40" Width="160" /> <TextBlock Foreground="White">Просмотр видео</TextBlock> </Canvas> </Grid> </UserControl>
Результат приведен на рисунке ниже.
3) Управление воспроизведением звука.
Ниже приводится XAML описание элемента MediaElement, определяющее, что звук не выключен, общая громкость составляет 50% и что баланс звука смещен вправо:
<MediaElement Source="Wildlife.wmv" Height="200" Width="200" Stretch="Fill" IsMuted="False" Volume="0.5" Balance="0.8"/>
4)Программирование MediaElement
MediaElement позволяет управлять воспроизведением методами Play, Stop (Остановить) и Pause (Приостановить). Кроме того, имеется возможность взаимодействовать с видео, отслеживая процесс буферизации и загрузки, а также реагировать на маркеры, размещенные в видеофайле. Можно также обрабатывать события, например нажатие кнопок мыши.
Основными методами управления видео являются Play, Stop и Pause. Если свойству AutoPlay элемента управления MediaElement задано значение false, для начала воспроизведения видео необходимо применить Play. Даже если AutoPlay задано значение true, и воспроизведение начинается автоматически, с помощью этих методов его можно остановить или приостановить.
Следующий код XAML, в котором имеется элемент мультимедиа и три простых элемента управления воспроизведением, реализованных как элементы TextBlock:
<UserControl x:Class="SLMediaPlayer.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <Grid x:Name="LayoutRoot" Background="White"> <MediaElement x:Name="vid" Source="Wildlife.wmv" /> <Canvas Canvas.Top="160"> <Rectangle Fill="Black" Width="200" Height="24" Opacity="0.7"/> <TextBlock MouseLeftButtonDown="doPlay" Foreground="White" Canvas.Left="20">Play</TextBlock> <TextBlock MouseLeftButtonDown="doStop" Foreground="White" Canvas.Left="80">Stop</TextBlock> <TextBlock MouseLeftButtonDown="doPause" Foreground="White" Canvas.Left="140">Pause</TextBlock> </Canvas> </Grid> </UserControl>
Для создания элементов управления потребуется задать имя функции, которая должна выполняться в ответ на событие, связанные с мышью, используя атрибут самого элемента управления видео. Это можно реализовать путем обработки события MouseLeftButtonDown для текстового блока, связав их с функциями, воспроизводящими, приостанавливающими или останавливающими воспроизведение.
Код обработчика событий, связанных с элементами TextBlock необходимо разместить в файле MainPage.xaml.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SLMediaPlayer { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void doPlay(object sender, MouseButtonEventArgs e) { vid.Play(); } private void doPause(object sender, MouseButtonEventArgs e) { vid.Pause(); } private void doStop(object sender, MouseButtonEventArgs e) { vid.Stop(); } } }
Вид приложения в браузер предсавлен на рисунке.
5)Управление положением курсора воспроизведения.
Для управления текущим положением курсора воспроизведения используются свойства NaturalDuration (Номинальная продолжительность) и Position (Положение) элемента мультимедиа. После того, как свойство CurrentState элемента мультимедиа устанавливается в значение Opened, становится возможным получение значения и свойства NaturalDuration. Продолжительность видео в секундах можно получить с помощью NaturalDuration.Seconds и потом преобразовать это значение в часы, минуты и секунды.
В следующем примере событие CurrentStateChanged элемента управления MediaElement ассоциировано с функцией doState, которая перехватывает значение свойства NaturalDuration.
Изменим XAML описание медиаплейера:
<Canvas x:Name="sample9" Opacity="1"> <MediaElement x:Name="vid" Source="Wildlife.wmv" CurrentStateChanged="doState"/> <TextBlock MouseLeftButtonDown="doPlay" Foreground="White" Canvas.Left="20">Play</TextBlock> <TextBlock MouseLeftButtonDown="doStop" Foreground="White" Canvas.Left="80">Stop</TextBlock> <TextBlock MouseLeftButtonDown="doPause" Foreground="White" Canvas.Left="140">Pause</TextBlock> <TextBlock x:Name="txtStat" Canvas.Left="200" Canvas.Top="0"></TextBlock> <TextBlock x:Name="txtBuff" Canvas.Left="200" Canvas.Top="30"></TextBlock> </Canvas>
и соответствующий ему C# код:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SLMediaPlayer { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void doPlay(object sender, MouseButtonEventArgs e) { vid.Play(); } private void doPause(object sender, MouseButtonEventArgs e) { vid.Pause(); txtStat.Text = vid.Position.ToString(); } private void doStop(object sender, MouseButtonEventArgs e) { vid.Stop(); } private void doState(object sender, RoutedEventArgs e) { txtBuff.Text = vid.NaturalDuration.ToString(); } } }
Скриншот работающего приложения, отображающего фактически значения свойств NaturalDuration и Position, можно увидеть на рисунке.