WEB开发网
开发学院图形图像Flash 在 Silverlight 中管理动态内容交付,第 1 部分 阅读

在 Silverlight 中管理动态内容交付,第 1 部分

 2009-02-05 11:54:37 来源:WEB开发网   
核心提示: XAML 序列化(通过 XamlReader 和 XamlWriter 类执行)所基于的原则是扩展引用被取消引用,而且运行时值通过设计时设置进行保存,在 Silverlight 中管理动态内容交付,第 1 部分(10),如果希望下载 XAML 内容并在显示前对其进行自定义(例如,通过动态数

XAML 序列化(通过 XamlReader 和 XamlWriter 类执行)所基于的原则是扩展引用被取消引用,而且运行时值通过设计时设置进行保存。如果希望下载 XAML 内容并在显示前对其进行自定义(例如,通过动态数据绑定),这时该怎么办?您无法将绑定嵌入到 XAML 源中,但可以在下载的 XAML 中定义占位符、通过数据解析检索它们并以编程方式将其设置为您希望的任何值。但在 Silverlight 2 中,下载 XAP 程序包无疑是更合理的解决方案。

使用 XAP 程序包

XAP 程序包内含整个 Silverlight 应用程序,其用户界面主要由一个用户控件构成,此控件实际上只是 XAML 标记和代码的容器。

如前所述,XAP 程序包内含指令清单文件所跟踪的一或多个程序集。除下载外,处理 XAP 程序包还会导致两个额外的步骤。您需要提取主程序集,然后实例化用于启动已下载应用程序的入口点类。毫无疑问,此时您可以在 XAML 中使用绑定、样式、事件以及其他任何需要的内容。使用 XAP 程序包时,是由 Silverlight 运行时(而不是序列化 API)来处理 XAML 并在随后解析引用。这将对编程功能产生巨大影响。

下载和处理 XAP 程序包还需要许多其他工作,而不仅仅是通过字符串来构建对象模型。其中的一些工作(通常包括内容下载和程序集提取)可以转给可重复使用的 downloader 类(请参见图 3)。

在 Silverlight 中管理动态内容交付,第 1 部分图 3 动态下载 XAP 程序包

public partial class Page : UserControl
{
  private UIElement content = null;
  private TabItem item = null;
  public Page()
  {
    InitializeComponent();
  }
  private void chkNewContent_Click(object sender, RoutedEventArgs e)
  {
    bool shouldDisplay = (sender as CheckBox).IsChecked.Value; 
    if (shouldDisplay)
    {
      if (!IsContentAvailable())
        DownloadContent();
      else
        ShowContent();
    }
    else
    {
      HideContent();
    }
  }
  private bool IsContentAvailable()
  {
    return (content != null);
  }
  private void DownloadContent()
  {
    Downloader dl = new Downloader();
    dl.XapDownloaded +=
      new EventHandler<XapEventArgs>(OnPackageDownload);
    dl.LoadPackage("more.xap", "more.dll", "More.ExtraTab");
  }
  void OnPackageDownload(object sender, XapEventArgs e)
  {
    content = e.DownloadedContent;
    ShowContent();
  }
  private void HideContent()
  {
    this.TabList.Items.Remove(item);
  }
  private void ShowContent()
  {
    item = new TabItem();
    item.Header = "Extra tab";
    item.Content = content;
    this.TabList.Items.Add(item);
  }
}

图 3 中的代码显示了一个基于选项卡的示例应用程序,它会在用户首次单击复选框时加载一个新选项卡。在本例中,会下载一个新的 XAP 程序包,而且其用户界面中包含的用户控件将被插入到新建的 TabItem 中。隐藏新下载的程序包中的内容是一个简单的客户端操作。由于以下两个合理原因,重新显示该内容并不需要第二次往返动作:该内容被缓存在内存中;从中构建该内容的程序包被缓存在浏览器缓存中。

上一页  5 6 7 8 9 10 

Tags:Silverlight 管理 动态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接