|
|
|||||||||||||||||||||||||||||
|
Использование Silverlight и RSS для разработки панели анонсов (hero bar) в приложениях ASP.NET (исходники)Источник: GOT DOT NET Лоранс Морони (Laurence Moroney)
Мы все видели панели анонсов на наших любимых веб-сайтах. Это те самые баннеры наверху страницы, которые показывают новый контент и обеспечивают прямую ссылку на него. Знаете ли вы, что создать такую панель с помощью Silverlight несложно? А знаете ли вы о том, что содержимым этой панели легко управлять с помощью RSS? В этой статье вы узнаете, как создать простую панель анонсов, которая будет легко настраиваться и будет воспроизводиться простым редактированием документа RSS. Таким образом, вы можете разработать панель анонсов, которая будет отображать новые записи в вашем блоге, если он поддерживает потоки RSS. И все что необходимо для обновления панели анонсов - это создание новой записи в блоге! Рис. 1 показывает панель анонсов в действии.
В данной статье описаны следующие шаги, которые необходимо сделать для создания панели анонсов:
Создание шаблона XAMLПанель анонсов, показанная на рис. 1, это панель размером 960 на 150 пикселей, содержащая одно изображение, заголовочный элемент с увеличенным шрифтом и элементы описания со шрифтом поменьше. В XAML все это необходимо собрать внутри canvas, как показано ниже:
Конечно, вы можете разработать собственный дизайн XAML, но обращайте пристальное внимание на названия элементов. Эти названия используются ASP.NET для адресации к соответствующим элементам с помощью XPath. Кроме всего этого вам наверняка захочется анимировать переходы от баннера к баннеру. В нижеприведенном примере анимация используется для плавного перехода по прозрачности от текущего элемента к следующему:
В этом примере используется элемент DoubleAnimationUsingKeyFrames, который плавно изменяет прозрачность элемента от 0 (невидимый) до 1 (полная видимость) за пять секунд и с 1 до 0 за следующую секунду. Это будет использовано в качестве шаблона для каждой анимации. Например, если на вашей панели анонсов размещено пять элементов, то для каждого из них придется заводить такую смену прозрачностей (раскадровку Storyboard). Использование RSSСпецификацией RSS определяется узел <item>, который может содержать заголовок, ссылку, описание и элемент ресурса, например графику или видео внутри тэга <enclosure>. В этом примере используется изображение, но в принципе нет причин для того, чтобы не использовать видео-панель анонсов и указывать видеоресурсы внутри тэга <enclosure>, при этом использовать <MediaElement> вместо <Image> внутри XAML. Ниже приведен пример документа RSS, который содержит ссылки на примеры Silverlight на ресурсе Channel9. Эти ссылки вы можете заменить на любые другие.
Если вы используете RSS, сгенерированный, например, вашим блогом, убедитесь, что поддерживаются указанные выше узлы, если это не так, то придется доделывать код ASP.NET для того, чтобы обрабатывать структуру документа RSS. Создание приложения ASP.NET для генерации XAML на основе документа RSSПервое что необходимо сделать - это переопределить HTML-вывод, получаемый со страницы ASPX, потому что вам необходимо, чтобы в таком выводе получался код XAML. Самый простой способ - это стереть весь код разметки кроме первой строки со страницы ASPX. Например, если вы назвали свою страницу "GenerateXaml.aspx", в ней должна содержаться строка, приведенная ниже:
Далее вам наверняка захочется использовать код, подобный нижеприведенному в обработчике события Page_Load:
Так как этот код обрабатывает параметр feed, то указать URI документа RSS вы можете, выполнив вызов http://server/GenerateXaml.aspx?feed=URI. Если же вы не укажете значение этого параметра, то чтение будет производиться из файла rssfeed.xml, расположенного в той же директории, что и страница ASPX. Далее производится чтение потока RSS в документ XAML, и производится вызов вспомогательной функции GenerateXaml для создания нового документа XmlDocument, названного xmlXaml. Далее содержимое документа xmlXaml выводится в ответный поток. Вся работа происходит внутри вспомогательной функции GenerateXaml. Это большая функция, и мы разберем ее по шагам. Сначала вам необходимо сделать следующее:
Когда вы используете XAML в ASP.NET совместно с интерфейсами XML API, вам необходимо использовать XmlNameSpaceManager для работы с различными пространствами имен. Некоторые элементы Silverlight используют пространство имен по умолчанию, в то время как другие используют пространства имен с префиксом "x:" (например "x:Name"). Такой префикс необходимо указать менеджеру пространств имен; когда используете пространство имен по умолчанию, ставьте префикс "d". Например, когда ищете узлы в пространстве имен "Image", являющемся пространством имен по умолчанию, вам необходимо обращаться к нему как "d:Image". Далее вы получаете список узлов из документа RSS. Для этого вы используете интерфейс SelectNodes API для того, чтобы получить список элементов NodeList.
Теперь, когда есть узел, необходимо отредактировать детали, поместить изображение, взять заголовок из элемента RSS:
Управление ссылками URLОдной небольшой проблемой XAML является то, что определяемые JavaScript-обработчики событий страницы нельзя параметризировать. И поэтому нельзя передать индивидуальную ссылку URI элемента в панели анонсов в XAML, как показано ниже:
Вместо этого вам придется вызывать собственную функцию DoClick и использовать идентификатор элемента canvas, на котором произошло событие. Вторая страница ASPX будет считывать поток RSS и генерировать массив JavaScript. Страница, содержащая баннер Silverlight, может обращаться к массиву, который будет использоваться в JavaScript-обработчиках событий. Ниже приведен код на языке C#, который выводит массив JavaScript:
Отображение панели анонсов в SilverlightТеперь, когда все составляющие части в сборе, отобразить панель анонсов с помощью Silverlight стало несложной задачей. Полный код страницы HTML, которая реализует такое отображение, вместе с обработчиками JavaScript для управления ссылками URL приведен ниже: Отметим, что обращение к странице GenerateJS.aspx происходит внутри элемента <script>. В этом случае при вызове страницы GenerateJS.aspx она сгенерирует массив JavaScript, описанный в предыдущей секции. XAML-элемент <Canvas> указывает, что DoClick должна реагировать на нажатие левой кнопки мыши, и сама функция реализована здесь. В ней используется новая переменная n. В эту переменную помещается значение sender, заменяя строку cnvItem на пустую строку. В sender содержится имя элемента canvas, в котором произошло событие, например cnvItem0, cnvItem1. После замены cnvItem на пустую строку, в переменную n помещается 0 или 1 (для приведенных выше примеров). Далее для перехода по одной из ссылок определенной в массиве urls (сгенерированном страницей GenerateJS.aspx) мы используем вызов Window.Open(urls[n]). Наконец мы создаем элемент управления Silverlight, вызвав функцию createSilverlight(). Она находится внутри JavaScript-библиотеки createSilverlight.js, которая включается в страницу в одной из начальных строк. Ниже приведен код, необходимый для создания экземпляра элемента управления Silverlight:
Первый параметр - это страница GenerateXaml.aspx, которая генерирует XAML, о чем мы узнали ранее. После этого Silverlight отображает сгенерированный XAML и на вашей странице появляется панель анонсов, которую вы можете легко модернизировать путем правки XAML и не менее легко обновлять с помощью RSS. Здесь показано, как органично вписывается Silverlight в экосистему разработки приложений Microsoft. Используйте RSS, ASP.NET, XAML и Silverlight для создания новых приложений!
|
|