在上一篇自定义Tile系统中,Tile系统的Uri是固定写死在程序中的,这样如果修改的话就会造成程序需要重新生成,那么如何可以动态改变Uri呢?本篇介绍的方法就是通过网页在Silverlight初始化前向其传递参数。
1、准备参数
因为Silverlight程序是需要以网页为载体,所以向Silverlight传递参数的工作就需要网页来完成了,这里就使用WebForm作为示例,使用web.config来存储参数(换成数据库也是一个道理)。
首先,在web.config文件的appSettings结点中添加配置服务器的地址和请求字符串的格式:
<configuration> <appSettings> <add key="server" value="localhost:58591"/> <add key="format" value="http://{0}/GetTile.ashx?type=china&format=png&quadkey={quadkey}"/>
</appSettings> </configuration>
2、读取参数
在后台中通过WebConfigurationManager来读取配置。
public string Server { get { return WebConfigurationManager.AppSettings["server"]; } } public string Format { get { return WebConfigurationManager.AppSettings["format"]; } }
3、传递参数
这里是最核心的一步,那就是使用InitParams来向Silverlight程序传递参数,下面是前台的主要代码(其余内容参考复制VS自动生成的测试页的内容就可以了):
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="ClientBin/MapOnBing_Silverlight.xap"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="white" /> <param name="minRuntimeVersion" value="5.0.61118.0" /> <param name="autoUpgrade" value="true" /> <param name="InitParams" value="Server=<%=Server %>,Format=<%=Format %>" /> <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/> </a> </object>
基本都是直接复制测试页的内容,关键的修改在于:
<param name="InitParams" value="Server=<%=Server %>,Format=<%=Format %>" />
通过这里就可以向Silverlight程序传递参数了。多个参数之间可以通过,逗号进行分割。
4、接收参数
在Silverlight程序中,找到App.xaml文件,打开其后台代码App.xaml.cs,找到Application_Startup事件处理方法,可以在这里使用StartupEventArgs的InitParams属性接收到前台传来的参数。下面是代码示例:
public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { this.RootVisual = new MainPage(); //读取网页中动态设置的地址 if (e.InitParams.Count > 0) { //将读取到的配置暂存到静态变量中 MainPage.Server = e.InitParams["Server"].ToString(); MainPage.Format = e.InitParams["Format"].ToString(); } else { //没有读取到配置时可以设置一个默认值 MainPage.Server = "localhost"; MainPage.Format = "http://{0}/GetTile.ashx?type=china&format=png&quadkey={quadkey}"; } } }
这样就从Silverlight程序中读取到了页面的参数。
5、使用参数
public partial class MainPage : UserControl { public static string Server; public static string Format; }剩下的就是如何使用了,自由发挥吧~