在下面的内容中,以一个具体实例来演示C# 4.0中的动态编程是如何简化对Silverlight应用程序中HTML DOM对象的访问的。
(1)安装Silverlight 2 runtime和SDK
为了运行这个实例,需要安装Silverlight 2 runtime和SDK。这些都可以从微软的网站上直接下载:
Silverlight 2 RTW runtime。
Silverlight 2 RTW SDK。
另外,因为Visual Studio 2010跟Silverlight的一些已知的兼容性问题,还需要一个拥有管理员权限的账号来运行Visual Studio 2010 CTP。
(2)下载实例项目SilverlightSolution
为了演示C#4.0的诸多新特性,微软通过MSDN Code Gallery发布了一个演示C#新特性的实例程序包,所用到的实例项目SilverlightSolution就在这个程序包中。可以访问:
http://code.msdn.microsoft.com/csharpfuture
下载此实例程序包后,将需要的项目SilverlightSolution解压到C盘根目录下。
(3)编译并运行实例项目
用管理员身份启动Visual Studio CTP,然后打开SilverlightSolution项目,将得到一个空的Silverlight程序页面,如图12-6所示。
图12-6 Silverlight程序界面
(4)添加对HTML DOM对象的动态访问
在Page类中添加两个dynamic类型的对象doc和win,分别用于表示当前页面和窗口,修改后的Page类如下:
然后,修改Page类的函数btnSearch_Click(),当用户单击”Get All”按钮后,更新用户搜索的内容,修改窗口的标题。
(www.xing528.com)
(5)添加Virtual Earth Jscript控件
打开解决方案中的测试页StartPage.htm,在<title>标签的前面添加如下Jave Script代码,引用Virtual Earth控件:
然后,在<body>标签中添加如下代码,定义地图控件的位置和大小。只需通过简单的两步,就完成了对测试页面的修改。接下来即可通过C#访问和控制Virtual Earth控件了。
(6)用C#代码控制Virtual Earth控件
在Page类中添加如下代码控制Virtual Earth控件,以实现获取地图,添加Pin的功能。代码如下:
为了体会动态编程所带来的便利,接下来看看在没有动态类型的C# 3.0中,AddPin()函数应该如何实现。如果是在C# 3.0中,doc,win和map都将是静态类型,为了执行这些对象的某些方法,需要进行显式的类型转换,同时,还需要将方法名作为字符串传递以实现方法的调用。很明显,C# 3.0中的实现过程非常繁琐,而C# 4.0中的实现是如此的简单、自然:
接下来需要在适当的位置调用这两个函数,以实现地图的加载和Pin的添加。在Page类的Init()函数中添加GetMap()函数调用:
另外,在lstPictures_SelectionChanged()函数中添加AddPin()函数,当用户选择的图片变化后,重新获取Pin的位置并添加到地图上:
(7)编译解决方案
至此,对项目的修改就全部完成了。重新编译整个解决方案,可以看到添加Virtual Earth控件后的页面。当在左侧列表中选择图片后,Pin会定位到这幅图片拍摄的地点,当把鼠标移动到Pin上时,则会显示图片和更多的相关信息,如图12-7所示。
图12-7 添加Virtual Earth后的页面
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。