
- •18. Практическое занятие: Применение элементов ria в Интернет-магазине
- •18.1. Описание Deep Zoom
- •18.2. Работа с Deep Zoom Composer
- •18.2.1. Меню
- •18.2.2. Внутренние ссылки
- •18.2.3. Тэги
- •18.2.4. Различные способы экспорта из Deep Zoom
- •18.3. Подключение Deep Zoom на страницу через Expression Web
- •18.4. Интеграция интернет-магазина с Silverlight-приложением
- •18.4.1. Разработка пользовательского компонента на основе MultiScaleImage
- •18.4.2. Работа с изображениями
- •18.4.3. Отображение
- •18.4.4. Установка приложения Silverlight на страницу
- •18.5. Способы подключения видео
- •18.5.1. Использование Windows Media Player
- •18.5.2. Использование Silverlight-плеера
- •18.5.3. Разработка Silverlight-плеера с динамическим контентом
- •18.6. Ключевые термины
- •18.7. Краткие итоги
18.5.3. Разработка Silverlight-плеера с динамическим контентом
Добавим в наше решение новый Silverlight проект SilverlightPleer и реализуем класс MainPage следующим образом:
<UserControl x:Class="SilverlightPleer.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"
Width="300" Height="200"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot" Margin="0,0,0,84">
<Grid.RowDefinitions>
<RowDefinition Height="0.715*"/>
<RowDefinition Height="0.285*"/>
</Grid.RowDefinitions>
<MediaElement x:Name="myMedia" Source="2.wmv" Width="300"
Margin="-2,0,2,-49" d:LayoutOverrides="VerticalAlignment"
Grid.RowSpan="2" AutoPlay="False"/>
<Button Width="94" Height="30" Content="Проиграть" Click="Button_Click"
Margin="-1,0,0,-83" VerticalAlignment="Bottom"
d:LayoutOverrides="VerticalAlignment, Height" RenderTransformOrigin="0.613,1.067"
Grid.Row="1" HorizontalAlignment="Left"/>
<Button Width="92" Height="30" Content="Остановить" Click="Button_Click_1"
HorizontalAlignment="Right" Margin="0,0,0,-83" VerticalAlignment="Bottom"
RenderTransformOrigin="0.613,1.067" Grid.Row="1"
d:LayoutOverrides="VerticalAlignment, Height"/>
<Button Height="30" Content="Пауза" Click="Button_Click_2"
Margin="105,0,103,-82" VerticalAlignment="Bottom"
RenderTransformOrigin="0.613,1.067" Grid.Row="1"
d:LayoutOverrides="VerticalAlignment, Height"/>
</Grid>
</UserControl>
Не будем подробно останавливаться на приведенном коде, отметим только, что на этой странице используется три кнопки и объект MediaElement, который предоставляет интерфейс для отображения различных видео-файлов. Видео-файл указывается в атрибуте Source и должен находиться в директории ClientBin.
Теперь необходимо реализовать логику плеера. Для этого в методе MainPage_Loaded зарегистрируем приложение на странице, чтобы позднее получить доступ к нему через JavaScript, реализуем метод changeMediaSource, который пометим атрибутом [ScriptableMember], что позволит вызывать этот метод из JavaScript. В реализации этого метода остановим проигрывание видео и изменим видео-файл на "3.wmv" (на самом деле необходимо хранить имя видео-файла для продуктов в БД). Также реализуем обработчики нажатия на кнопки "Проиграть", "Остановить" и "Пауза".
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
HtmlPage.RegisterScriptableObject("basic", this);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
changeMediaSource();
}
[ScriptableMember]
public void changeMediaSource()
{
myMedia.Stop();
myMedia.Source = new Uri("3.wmv", UriKind.Relative);
myMedia.Play();
isStoped = false;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
myMedia.Stop();
isStoped = true;
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
if (!isStoped)
{
myMedia.Pause();
isStoped = true;
}
else
{
myMedia.Play();
isStoped = false;
}
}
Теперь все готово к тому, чтобы разместить плеер на ASP-компоненте ProductControl. Для этого добавим следующий код:
<div id="silverlightControlHost" style='height:300px; width=200px;'>
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
width="100%" height="100%" id="silverlightControl">
<param name="source" value="../ClientBin/SilverlightPleer.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40818.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0"
style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181"
alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
<iframe id="_sl_historyFrame"
style="visibility:hidden;height:0px;width:0px;border:0px">
</iframe>
</div>
<asp:Button ID="ButtonPlayJavaScript" runat="server"
Text="Изменить видео" OnClientClick="changeMedia();" />
<script language="javascript" type="text/javascript">
function changeMedia() {
var svlObject = document.getElementById("silverlightControl");
svlObject.Content.basic.changeMediaSource();
}
</script>
Как уже отмечалось, содержимое div'а стандартно для всех Silverlight-приложений. Помимо этого, добавляется новая Javascript-функция, которая также позволяет менять источник видео.
Примечание: код функции changeMedia располагается на странице products/default.aspx, в PlaceHolder'е предназначенном для загрузки скриптов.
На рис. 18.19 отображается результирующая карточка продукта со встроенным Silverlight-приложением.
Рис. 18.19. Карточка продукта со встроенным Silverlight-приложением