- 浏览: 680905 次
- 性别:
- 来自: 石家庄
-
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
声明:该博文转载自:http://daizhj.blog.51cto.com/285189/124340
因为Silverlight可以访问HTML中的DOM元素以及调用HTML页面中的JS方法,并且可以将自身的方法“暴露”给HTML页面中的JS方法(通过ScriptableMember]),所以我们可以利用这一特点来实现两个Silverlight应用程序之间的数据通信。为了直观起见,本人做了这个DEMO,希望能够对大家在理解上有所帮助。
本DEMO的工作流程如下:
Silverlight 1 调用HTML中的JS方法,而该方法会去调用Silverlight 2中“暴露”的方法来显示选中的数据。
Silverlight 1 调用HTML中的JS方法,而该方法会去调用Silverlight 2中“暴露”的方法来显示选中的数据。
请大家先看一下这个DEMO的运行效果,如下图所示:


在上图中分别有两个Silverlight应用,一个是雇员列表,一个是详细信息。其中的雇员列表是我以前在园子里发表过的一遍文章中提到的DEMO,这里只是为了便于演示而简单的加以改造,其雇员类信息如下:
[ScriptableType] public class EmployeeInfo { /// <summary> /// 雇员编号 /// </summary> [ScriptableMember] public int EmployeeNo { get; set; } /// <summary> /// 雇员名称 /// </summary> [ScriptableMember] public string EmployeeName { get; set; } /// <summary> /// 地址 /// </summary> [ScriptableMember] public string Address { get; set; } }
上面的ScriptableType,ScriptableMember属性绑写是为了让html中的脚本代码可以访问(即可见)。
而下面的代码则是为了定义一个“脚本对象类”及其事件处理(包括参数)。
而下面的代码则是为了定义一个“脚本对象类”及其事件处理(包括参数)。
/// <summary> /// 雇员事件参数(用于完成与js绑定事件参数) /// </summary> [ScriptableType] public class EmployeeInfoEventArgs : EventArgs { [ScriptableMember] public EmployeeInfo employeeInfo { get; set; } } /// <summary> /// 要注册并在页面中使用的js调用脚本对象 /// </summary> [ScriptableType] public class JavaScriptableObject { /// <summary> /// js捆绑的事件处理器 /// </summary> [ScriptableMember] public event EventHandler<EmployeeInfoEventArgs> SelectEmployeeInfo; public void OnSelectEmployeeInfo(EmployeeInfo employeeinfo) { if (SelectEmployeeInfo != null) { SelectEmployeeInfo(this, new EmployeeInfoEventArgs() { employeeInfo = employeeinfo }); } } }
接着就是一个雇员数据操作类,主要用于获取雇员信息,如下:
/// <summary> /// 雇员信息管理类 /// </summary> public class EmployeeManager { public IEnumerable<EmployeeInfo> employeeList; /// <summary> /// 初始化会员数据 /// </summary> public EmployeeManager() { //初始化雇员数据 employeeList = new List<EmployeeInfo>() { new EmployeeInfo(){EmployeeNo = 10001, EmployeeName = "张三" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10002, EmployeeName = "李四" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10003, EmployeeName = "王五" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10004, EmployeeName = "马六" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10005, EmployeeName = "王大麻子" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10006, EmployeeName = "王宝强" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10007, EmployeeName = "王蛋蛋" , Address = "北京"}, new EmployeeInfo(){EmployeeNo = 10008, EmployeeName = "王五强" , Address = "北京"} }; } /// <summary> /// 获取指定数量的雇员数据 /// </summary> /// <param name="count">要获取的雇员信息数</param> /// <returns></returns> public IEnumerable<EmployeeInfo> GetEmployeeList(int count) { return (from e in employeeList select new EmployeeInfo { EmployeeNo = e.EmployeeNo, EmployeeName = e.EmployeeName, Address = e.Address }).Take(count); } }
有了数据和数据结构,我们可以在应用程序中给列表控件绑定数据源了,如下:
//这里必须声明是public,否则js调用该方法时会报错 [ScriptableMember] public void LoadData(int count) { //加载指定数据的雇员信息 EmployeeList.ItemsSource = new EmployeeManager().GetEmployeeList(count); }
当然DEMO中所提供的功能里有“选取某一行雇员信息”的操作,其实现方法如下:
/// <summary> /// 单击编辑雇员列表信息事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void EmployeeList_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { //当有要编辑的信息时 if (EmployeeList.SelectedItem != null) { EmployeeInfo employeeInfo = EmployeeList.SelectedItem as EmployeeInfo; //执行选中信息事件操作(最终会执行js所绑定的function代码) javaScriptableObject.OnSelectEmployeeInfo(employeeInfo); } }
大家请注意上面的这一行代码:
其完成的就是对HTML页面上JS绑定事件的调用,其JS绑写事件代码如下:
javaScriptableObject.OnSelectEmployeeInfo(employeeInfo);
其完成的就是对HTML页面上JS绑定事件的调用,其JS绑写事件代码如下:
//初始化操作 function Init(obj) { //绑定js函数到silverlight的事件处理器 $get("Xaml1").content.EmployeeObject.SelectEmployeeInfo = ShowSelectEmployeeInfo; }
当然,上面还有一个内容没有说明,即EmployeeObject对象是从哪来的,其实它就是我们公布到HTML中让 JS可以访问的对象JavaScriptableObject的实例,如下:
JavaScriptableObject javaScriptableObject; void Page_Loaded(object sender, RoutedEventArgs e) { javaScriptableObject = new JavaScriptableObject(); //注册js可用的类型(详情见Silverlight_JS_callTestPage.aspx中的js代码) HtmlPage.RegisterScriptableObject("EmployeeObject", javaScriptableObject); .. }
而JS方法"ShowSelectEmployeeInfo"即是实现对Silverlight 2应用中“暴露”方法的调用。其内容如下:
//显示选取的雇员信息 function ShowSelectEmployeeInfo(sender, args) { $get("Xaml2").content.Page.LoadDetailData(parseInt(args.employeeInfo.EmployeeNo), args.employeeInfo.EmployeeName, args.employeeInfo.Address); }
而Silverlight 2应用中的LoadDetailData方法所实现的就是将选中的单个雇员信息进行显示,如下:
//这里必须声明是public,否则js调用该方法时会报错 [ScriptableMember] public void LoadDetailData(int employeeNo, string employeeName, string address) { //加载指定数据的雇员信息 EmployeeNo.Text = employeeNo.ToString(); EmployeeName.Text = employeeName; Address.Text = address; }
到这里,基本上DEMO中的主要内容就介绍完了。
下面再给大家演示一个Silverlight与FLASH进行数据通信 的例子,其实现的功能如下:
在Silverlight应用中拖动一张图片,在右侧的FLASH区域中相应的FLASH对象跟着被“移动”,其效果如下
图所示:
下面再给大家演示一个Silverlight与FLASH进行数据通信 的例子,其实现的功能如下:
在Silverlight应用中拖动一张图片,在右侧的FLASH区域中相应的FLASH对象跟着被“移动”,其效果如下
图所示:


其实这个DEMO最初的原型出自微软件的黄继佳,我是在一次SILVERLIGHT培训中看到他这个演示,当时我想实现原理应该与本文所提到的大同小异,后来被证实现确实如此。当然他的演示中实现的JS代码很简单,完全就是用纯JS来实现即可。我这里并未完全使用了他的模型代码。因为上面所说的是在CS代码中进行事件的
绑定及其相关操作,所以我还是照上面所提供的思路重新写了这个DEMO,实现的效果与黄纪佳的原型基本相似。因为篇幅起见,这里就不多做赘述了,大家下载代码后一看便知(SLImage.xaml.cs和SLtoFlash.htm文件)。
绑定及其相关操作,所以我还是照上面所提供的思路重新写了这个DEMO,实现的效果与黄纪佳的原型基本相似。因为篇幅起见,这里就不多做赘述了,大家下载代码后一看便知(SLImage.xaml.cs和SLtoFlash.htm文件)。
作者:代震军,daizhj
- DataTransferInSL.rar (98.9 KB)
- 下载次数: 8
发表评论
-
silvelright酷站
2011-03-22 18:47 824http://completit.com/# -
silverlight翻转代码
2011-03-13 18:46 1136using System; using System.Net ... -
silverlight独立存储示例
2011-03-07 17:17 1081void CreateDir(string dirNam ... -
silverlight SDK和toolit中控件英文如何转换为英文
2010-11-11 15:50 1017解决方法: 设置 ... -
Silverlight4:网络地图服务
2010-10-16 11:01 1635Bing Maps与Google Earth一样 ... -
通过JS创建silverlight对象
2010-10-12 13:04 1695前言: 对于我们开发的silverlight应用来讲,有的时 ... -
silverlight childwindow源码
2010-09-18 21:17 1986<!-- // (c) Copyright Micro ... -
精彩的 Silverlight 开源项目
2010-08-18 14:32 2941Silverlight 物理模型 http://www.c ... -
MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)
2010-08-12 10:34 986本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
2010-08-12 10:03 686本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
2010-08-12 09:52 603本文章非原创,转载自: 作 者:Beniao 文 ... -
MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
2010-08-12 09:24 890本系列文章非原创,转载自: 作 者:Beniao ... -
MEF程序设计指南一:在应用程序中宿主MEF
2010-08-12 09:17 1081本系列文章非原创,转 ... -
silverlight应用程序库缓存
2010-08-10 14:22 1556应用程序库缓存可在用户重新访问网站时帮助改善启动性能。 ... -
Prism动态模块加载
2010-08-10 10:27 1709这篇介绍模块在silverlight的特殊应用. sil ... -
Silverlight中Json数据的转换方法(中文)
2010-08-04 11:36 1264[DataContract] public clas ... -
silverlight万花筒效果
2010-07-28 16:14 924见附件。 -
silverlight如何将颜色字符串转换为颜色
2010-07-02 10:42 1550public class ColorUtil { ... -
silverlight中Tab转Enter的实现方法
2010-06-04 17:38 1779silverlight项目中要求界面全键盘操作,并且在光标移动 ... -
silverlight和js相互调用
2010-05-13 16:56 1696步骤一:在silverlight后台代码类中声明被js调用的方 ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip