简单实现Silverlight项目和UserControl的多级切换
2009-04-07 10:54
375 查看
Silverligth文件比较大时,考虑到下载速度和时间的问题,可能需要对程序进行分割,分割成各个子项目组件,并在运行时动态下载需要的组件,下载后在主载体页面中进行组件切换,这样就能节约第一次下载的文件大小,并延长了下载时间,可以大大的提高用户体验。
这样做的好处很多,俺不再啰嗦,上菜了。。。。。以下是前天帮朋友实现的一个Demo。
1.首先来看看事例的组成:
private void btn_Click(object sender, RoutedEventArgs e)
{
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
//打开打包的xap文件
client.OpenReadAsync(new Uri("DynamicXap.xap", UriKind.Relative));
}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
//解包,读取AppManifest.xaml文件信息
string appManifest = new StreamReader(Application.GetResourceStream(
new StreamResourceInfo(e.Result, 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(e.Result, "application/binary"),
new Uri(source, UriKind.Relative));
if (source == "DynamicXap.dll")
{
asm = asmPart.Load(streamInfo.Stream);
}
else
{
asmPart.Load(streamInfo.Stream);
}
}
//======================
divshow.Children.Clear();
divshow.DataContext = DataOP.getUsers(txtInput.Text);
//转换此assembly为UIElement
UIElement myData = asm.CreateInstance("DynamicXap.Page") as UIElement;
divshow.Children.Add(myData);
divshow.UpdateLayout();
}
这样就差不多,小小工宣布告成,事例文件下载。
这样做的好处很多,俺不再啰嗦,上菜了。。。。。以下是前天帮朋友实现的一个Demo。
1.首先来看看事例的组成:
private void btn_Click(object sender, RoutedEventArgs e)
{
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
//打开打包的xap文件
client.OpenReadAsync(new Uri("DynamicXap.xap", UriKind.Relative));
}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
//解包,读取AppManifest.xaml文件信息
string appManifest = new StreamReader(Application.GetResourceStream(
new StreamResourceInfo(e.Result, 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(e.Result, "application/binary"),
new Uri(source, UriKind.Relative));
if (source == "DynamicXap.dll")
{
asm = asmPart.Load(streamInfo.Stream);
}
else
{
asmPart.Load(streamInfo.Stream);
}
}
//======================
divshow.Children.Clear();
divshow.DataContext = DataOP.getUsers(txtInput.Text);
//转换此assembly为UIElement
UIElement myData = asm.CreateInstance("DynamicXap.Page") as UIElement;
divshow.Children.Add(myData);
divshow.UpdateLayout();
}
这样就差不多,小小工宣布告成,事例文件下载。
相关文章推荐
- 实际项目导航栏菜单切换的简单实现
- 原生js与jQuery实现简单的tab切换特效对比
- JS+CSS实现的简单折叠展开多级菜单效果
- JS实多级联动下拉菜单类,简单实现省市区联动菜单!
- silverlight 3D 简单特效的实现。
- jq实现简单的tab切换效果
- 关于jquer实现淘宝物品详情栏切换展示的简单操作
- 项目总结4 类似网易云音乐导航栏指示器与Scrollview互动(个性推荐、歌单等)的简单实现(二)
- 简单编写makefile文件,实现GCC4.9编译项目,加入boost库测试等等。。
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- Silverlight通过MVVM实现多语言实时切换(含源代码)
- 在项目中远程调用另一个项目的简单实现
- 编写一个项目,实现页面之间切换时的动画效果。上传代码并描述步骤
- jQuery实现选项卡切换效果简单演示
- Spring + Mybatis 项目实现动态切换数据源实例详解
- 【小项目】实现一个简单的对象池,用来管理空间的申请和释放
- [Silverlight 技巧探讨1]用Silverlight简单实现多TabItem关闭效果
- javascript实现-最简单选项卡切换
- 纯DIV+CSS简单实现Tab选项卡左右切换效果