Управление доставкой динамического содержимого в Silverlight - Динамически создаваемый код XAML
ОГЛАВЛЕНИЕ
Динамически создаваемый код XAML
Подключаемый модуль Silverlight предназначен, по существу, для отображения содержимого в формате XAML. Если код XAML сопровождается некоторым кодом поддержки, тогда подключаемый модуль обрабатывает код для создания пользовательского интерфейса и поддержки любого закодированного поведения или эффектов. Если требуется загрузить только код XAML, можно указать непосредственно его URL-адрес; в противном случае для ссылки на пакет Silverlight можно использовать расширение XAP.
В пакет XAP входит манифест и одна или несколько сборок. Одна из этих загрузок содержит точку входа приложения; остальные сборки — это сборки, на которые имеются ссылки. XAML для пользовательского интерфейса хранится в файлах ресурсов сборки точки входа. Пакет XAP создается расширением Visual Studio 2008 для Silverlight 2 при создании и сборке проекта.
Единственное, что умеет делать подключаемый модуль Silverlight — это обработка потоков XAML и XAP. Однако для загрузки такого содержимого подключаемому модулю не обязательно указывать физический ресурс XAML или XAP на сервере. Можно, например, указать подключаемому модулю URL-адрес, возвращающий динамически создаваемое содержимое XAML или XAP.
На рис. 1 показан пример обработчика HTTP в ASP.NET, возвращающего оперативно созданный код XAML. Метод ProcessRequest устанавливает тип содержимого объекта Response, а затем записывает некоторое содержимое XAML, например составленный динамически код XAML, на основе данных настройки, параметров или условий этапа выполнения. Настраивая свойство Expires объекта Response, можно также предотвратить кэширование файла ресурса на клиентском компьютере. Это удобно, если содержимое, с которым вы работаете, периодически изменяется и требует обновления.
Рис. 1 Обработчик HTTP, возвращающий код XAML
<%@ WebHandler Language="C#" Class="XamlGenHandler" %>
using System;
using System.Web;public class XamlGenHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
// Prevent caching of the response
context.Response.Expires = -1;// Set the type of data we're returning
context.Response.ContentType = "text/xaml";// Create some XAML and return it down the wire
context.Response.Write("<Canvas xmlns=
'http://schemas.microsoft.com/client/2007' " +
"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>" +
"<TextBlock Foreground='black' Padding='10' FontSize='20'>
<Run>XAML content</Run><LineBreak/>" +
"<Run>[generated " + DateTime.Now.ToLongTimeString() + "]</Run>" +
"</TextBlock></Canvas>");
}public bool IsReusable
{
get {return true;}
}}