在 Silverlight 中管理动态内容交付,第 1 部分
2009-02-05 11:54:37 来源:WEB开发网XAML 序列化(通过 XamlReader 和 XamlWriter 类执行)所基于的原则是扩展引用被取消引用,而且运行时值通过设计时设置进行保存。如果希望下载 XAML 内容并在显示前对其进行自定义(例如,通过动态数据绑定),这时该怎么办?您无法将绑定嵌入到 XAML 源中,但可以在下载的 XAML 中定义占位符、通过数据解析检索它们并以编程方式将其设置为您希望的任何值。但在 Silverlight 2 中,下载 XAP 程序包无疑是更合理的解决方案。
使用 XAP 程序包
XAP 程序包内含整个 Silverlight 应用程序,其用户界面主要由一个用户控件构成,此控件实际上只是 XAML 标记和代码的容器。
如前所述,XAP 程序包内含指令清单文件所跟踪的一或多个程序集。除下载外,处理 XAP 程序包还会导致两个额外的步骤。您需要提取主程序集,然后实例化用于启动已下载应用程序的入口点类。毫无疑问,此时您可以在 XAML 中使用绑定、样式、事件以及其他任何需要的内容。使用 XAP 程序包时,是由 Silverlight 运行时(而不是序列化 API)来处理 XAML 并在随后解析引用。这将对编程功能产生巨大影响。
下载和处理 XAP 程序包还需要许多其他工作,而不仅仅是通过字符串来构建对象模型。其中的一些工作(通常包括内容下载和程序集提取)可以转给可重复使用的 downloader 类(请参见图 3)。
图 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 中。隐藏新下载的程序包中的内容是一个简单的客户端操作。由于以下两个合理原因,重新显示该内容并不需要第二次往返动作:该内容被缓存在内存中;从中构建该内容的程序包被缓存在浏览器缓存中。
Tags:Silverlight 管理 动态
编辑录入:爽爽 [复制链接] [打 印]- ››动态的改变IFrame的高度
- ››动态4种方法加载JS脚本
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››管理/var/spool/clientmqueue/下的大文件
- ››Silverlight for Windows Phone 7开发系列(1):...
- ››Silverlight for Windows Phone 7开发系列(2):...
- ››Silverlight for Windows Phone 7开发系列(3):...
- ››Silverlight for Windows Phone 7开发系列(4):...
- ››动态调用对象事件
- ››动态创建控件支持事件响应并可保存与读取
- ››Silverlight for Symbian
更多精彩
赞助商链接