赞助商
最近一直在做Silverlight插件,用来在页面上展示一些动画效果和视频播放,有关如何通过页面传递参数给Silverlight插件已经是一个老生常谈的话题了,不过我还是想在这里重新做下记录,方便新人学习,也方便自己日后查阅。

  大家都知道,我们在页面上使用Silverlight插件一般都采用下面这种标记,当然你也可以在aspx页面中使用silverlight标记,不过这种方式用得很少,而且只限于在aspx页面上使用。
  1. <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
  2.   <param name="source" value="ClientBin/SilverlightTest.xap"/>
  3.   <param name="onError" value="onSilverlightError" />
  4.   <param name="background" value="white" />
  5.   <param name="minRuntimeVersion" value="3.0.40624.0" />
  6.   <param name="autoUpgrade" value="true" />
  7.   <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
  8.       <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
  9.   </a>
  10. </object>
复制代码
与flash插件类似,在页面上使用的也是一个object标记,我们可以通过已有的param参数来修改silverlight插件的一些属性,例如我们可以使用source来要求silverlight插件使用不同的xap文件,使用onError设置Silverlight加载出错时要执行的脚本,使用background参数设置silverlight插件的背景色,以及使用minRuntimeVersion参数要求客户端运行 Silverlight插件的最小版本号,使用autoUpgrade参数要求是否允许客户端的Silverlight浏览器插件自动升级等等。除此之外,你还可以自定义参数,我们可以使用initParams来命名参数,通过该参数我们可以同时传递多个值给 Silverlight,如下面的代码:
  1. <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
  2.   <param name="source" value="ClientBin/SilverlightTest.xap"/>
  3.   <param name="onError" value="onSilverlightError" />
  4.   <param name="background" value="white" />
  5.   <param name="minRuntimeVersion" value="3.0.40624.0" />
  6.   <param name="autoUpgrade" value="true" />
  7.   <param name="initParams" value="programmer=Jaxu, blog=http://www.cnblogs.com/jaxu, title=silvelight" />
  8.   <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
  9.       <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
  10.   </a>
  11. </object>
复制代码
我们通过name/value对来设定initParams参数的值,如上例中就传递了三个不同的参数 programmer、blog和title。在服务器端如何接收这些值呢?看下面的示例,首先我们需要在App.xaml.cs文件的 Application_Startup事件中加载这些参数的值。
  1. private void Application_Startup(object sender, StartupEventArgs e)
  2. {
  3.   if ( e.InitParams != null )
  4.   {
  5.     foreach ( var item in e.InitParams )
  6.     {
  7.       this.Resources.Add( item.Key, item.Value );
  8.     }
  9.   }
  10.      
  11.   this.RootVisual = new Page();
  12. }
复制代码
通过遍历InitParams,我们将参数以键-值对的形式加载到Silverlight全局资源集合中,最后一行代码是 Silverlight默认的代码。使用的时候我们可以通过参数名从Silverlight全局资源集合中取出相应的值,可以写成一个函数方便调用。
  1. private string GetParam(string p)
  2. {
  3.   if ( App.Current.Resources[p] != null )
  4.   {
  5.     return App.Current.Resources[p].ToString();
  6.   }
  7.   else
  8.   {
  9.     return string.Empty;
  10.   }
  11. }
复制代码
这样我们就可以轻松地获取到页面上传递过来的参数了。如果需要传递的参数过多,除了采用name/value对的形式外,我们还可以将参数写到xml里,如大家比较熟悉的playList,将视频播放要使用的参数写到playList xml里,然后在Application_Startup事件中解析xml并加载参数的值,使用xml的形式便于组合和管理参数。
赞助商
赞助商
TOP