需要在不同的aspx页面调用不同的usercontrol控件,需要修改App.xaml.cs中Application_Startup函数中的代码,因为silverlight中都是从这个函数中去调用xaml文件的。
方法1,修改App.xaml.cs代码如下:
private void Application_Startup(object sender, StartupEventArgs e) { //this.RootVisual = new MainPage(); if (!e.InitParams.ContainsKey("InitPage")) { this.RootVisual = new MainPage(); return; } switch(e.InitParams["InitPage"]) { case "ConfrimBox": this.RootVisual = new ConfrimBox(); return; default : this.RootVisual = new ConfrimBox(); return; } }
其中index.aspx的代码如下:、
注意看标红的一行代码,这行代码里面指定了param参数InitParams,并且key为"InitPage",value为"ConfrimBox"
这时再看Application_Startup函数中的代码,根据判断是否带有InitParams参数,如果则根据其value值打开相应的UserControl.方法2:从第一种方式我们看出了弊端,实际项目中不可能这么去写switch,那还不写死去,所以我们想到了反射,代码如下:
//使用反射 //----------------------------反射方法1--------------------------------------// //Assembly assembly = Assembly.GetExecutingAssembly(); //string rootName = string.Format("SecondTest.{0}", e.InitParams["InitPage"]); //UIElement rootVisual = assembly.CreateInstance(rootName) as UIElement; //this.RootVisual = rootVisual; //---------------------------------反射方法2----------------------------------// String rootName = String.Format("SecondTest.{0}", e.InitParams["InitPage"]); Type type = Type.GetType(rootName); UIElement rootVisual = Activator.CreateInstance(type) as UIElement; this.RootVisual = rootVisual;
这样就可以实现我们的要求了。