Silverlight中调用自定义用户控件
1.在aspx页面中切换调用同一个Silverlight项目中的不同用户控件
1.1. 方法一
修改Silverlight项目启动文件App.xml的Application_Startup事件
private voID Application_Startup(object sender,StartupEventArgs e)
{
if (!e.InitParams.ContainsKey("InitPage"))
{
this.RootVisual = new MainPage();
return;
}
switch (e.InitParams["InitPage"])
{
case "SilverlightControl1":
this.RootVisual = new SilverlightControl1();
break;
case "SilverlightControl2":
this.RootVisual = new SilverlightControl2();
break;
default:
this.RootVisual = new MainPage();
break;
}
}
修改aspx页面
<div ID="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" wIDth="100%" height="100%" >
<param name="source" value="ClIEntBin/Binglang.SilverlightDemo19.xap"/>
<param name="InitParams" value="InitPage=SilverlightControl1" />
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?linkID=149156&v=3.0.40624.0" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?linkID=108181" alt="获取 Microsoft Silverlight" style="border-style: none"/>
</a>
</object><iframe ID="_sl_historyFrame" style='visibility:hIDden;height:0;wIDth:0;border:0px'></iframe></div>
1.2. 方法二
修改Silverlight项目启动文件App.xml的Application_Startup事件
private voID Application_Startup(object sender,StartupEventArgs e)
{
if (!e.InitParams.ContainsKey("InitPage"))
{
this.RootVisual = new MainPage();
return;
}
Assembly assembly = Assembly.GetExecutingAssembly();
String rootname = String.Format("Binglang.SilverlightDemo19.{0}",e.InitParams["InitPage"]);
UIElement rootVisual = assembly.CreateInstance(rootname) as UIElement;
this.RootVisual = rootVisual;
}
修改aspx页面
<div ID="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" wIDth="100%" height="100%" >
<param name="source" value="ClIEntBin/Binglang.SilverlightDemo19.xap"/>
<param name="InitParams" value="InitPage=SilverlightControl1" />
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?linkID=149156&v=3.0.40624.0" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?linkID=108181" alt="获取 Microsoft Silverlight" style="border-style: none"/>
</a>
</object><iframe ID="_sl_historyFrame" style='visibility:hIDden;height:0;wIDth:0;border:0px'></iframe></div>
2.调用不同Silverlight项目中的指定控件
2.1.建立项目
(1)Binglang.SilverlightDemo20
(2)Binglang.SilverlightDemo20.Web
(3) Binglang.ExternalProject
注意:项目Binglang.SilverlightDemo20中需要引用using System.Xml.linq;
假设(1)和(3)中各有一个控件,名称都为MainPage.xaml (不一定要相同)
mybutton.Click += new RoutedEventHandler(mybutton_Click);
voID mybutton_Click(object sender,RoutedEventArgs e)
{
WebClIEnt clIEnt = new WebClIEnt();
clIEnt.OpenReadCompleted += new OpenReadCompletedEventHandler(webClIEnt_OpenReadCompleted);
//打开打包的xap文件
clIEnt.OpenReadAsync(new Uri("Binglang.ExternalProject.xap",UriKind.relative));
}
voID webClIEnt_OpenReadCompleted(object sender,OpenReadCompletedEventArgs e)
{
//通过AppManifest.xaml文件取出动态库的信息
Assembly asm = LoadAssemblyFromXap(e.Result,"Binglang.ExternalProject.dll");
////使用反射创建相关的实例,并在页面上加载
holder.Children.Clear();
UIElement element = asm.CreateInstance("Binglang.ExternalProject.MainPage") as UIElement;
this.holder.Children.Add(element);
}
/// <summary>
/// 通过AppManifest.xaml文件取出动态库的信息
/// </summary>
/// <param name="packageStream">OpenReadCompletedEventArgs e.Result</param>
/// <param name="assemblyname">动态库文件名</param>
/// <returns></returns>
Assembly LoadAssemblyFromXap(Stream packageStream,string assemblyname)
{
//解包,读取AppManifest.xaml文件信息
string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(packageStream,null),new Uri("AppManifest.xaml",UriKind.relative)).Stream).ReadToEnd();
//------------解析AppManifest.xaml信息内容
XElement deploymentRoot = Xdocument.Parse(appManifest).Root;
List<XElement> deploymentParts = (from assemblyParts in deploymentRoot.Elements().Elements()
select assemblyParts).ToList();
Assembly asm = null;
foreach (XElement xElement in deploymentParts)
{
string source = xElement.Attribute("Source").Value;
AssemblyPart asmPart = new AssemblyPart();
StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(packageStream,"application/binary"),new Uri(source,UriKind.relative));
if (source == assemblyname)
{
asm = asmPart.Load(streamInfo.Stream);
}
else
{
asmPart.Load(streamInfo.Stream);
}
}
return asm;
}
总结以上是内存溢出为你收集整理的SilverLight中调用自定义用户控件全部内容,希望文章能够帮你解决SilverLight中调用自定义用户控件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)