文/Terrylee 出处/博客园
摘要大家都知道,在Silverlight 2应用程序中,每个应用程序将生成一个xap文件,每一个xap文件中只能设置一个起始的用户控件。如果我们有多个用户控件,需要在不同的ASP.NET页面中加载,最简单的方法莫过于针对多个用户控件分别建立对应的Silverlight项目,但这种方式有很多的缺点,如我们的样式文件需要在多个项目中进行拷贝。
本文将介绍利用初始化参数进行用户控件的切换这一技巧。
准备现在建立一个项目结构如下图所示,在Silverlight项目中我们有个三个用户控件:ContentPage、DefaultPage、MasterPage,需要在不同的ASP.NET页面加载时显示不同的用户控件。

附件:
您所在的用户组无法下载或查看附件思路要实现这个功能并不是什么难事,我们完全可以使用InitParams这个属性,如下图所示:

附件:
您所在的用户组无法下载或查看附件或者在HTML中通过param指定InitParameters:

附件:
您所在的用户组无法下载或查看附件该属性是一个Dictionary<string,string>类型的,我们可以在其中设置一系列的键-值对初始化参数,用逗号“,”分割开。所以我们的思路非常简单,就是在ASP.NET页面或者HTML中通过InitParameters指定起始用户控件,然后在Application_Startup事件中获取参数,并设置RootVisual。
实现如下面这段代码,我们设置一个初始化参数InitPage为ContentPage:

Code
<asp:Silverlight ID="Xaml1" runat="server"
Source="~/ClientBin/SwitchUserControl.xap"
MinimumVersion="2.0.30523"
Width="100%" Height="100%"
InitParameters="InitPage=ContentPage"/>
然后在Application_Startup根据参数不同设置不同的RootVisual:

Code
private void Application_Startup(object sender, StartupEventArgs e)
{
if (!e.InitParams.ContainsKey("InitPage"))
{
this.RootVisual = new DefaultPage();
return;
}
switch (e.InitParams["InitPage"])
{
case "MasterPage":
this.RootVisual = new MasterPage();
break;
case "ContentPage":
this.RootVisual = new ContentPage();
break;
default:
this.RootVisual = new DefaultPage();
break;
}
}
现在运行程序后,可以看到起始用户控件为ContentPage,如下图所示:

附件:
您所在的用户组无法下载或查看附件 您可能对 [Silverlight] 的这些文章也感兴趣: