Silverlight的 InLine Xaml 功能 - 让您可轻易地动态产生Xaml代码

<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>



  过去我们一直都是通过.xaml文件中的内容来设计Silverlight中的每一个元素的外观长相,有没有想过,如果需要动态的产生xaml代码,而不想通过.xaml文件来完成的时候该怎么办?

  有这种需要吗?有的,而且对于ASP.NET开发人员来说,这类的需求俯拾皆是。

  能够先把.xaml文件设计好,是我们假设早已经知道整个Silverlight功能要显示的内容、图形、或是动画等资源的个数与位置,如果这些信息事先都不知道,得要在执行阶段以ASP.NET的代码来动态决定的时候,显然就无法通过预先写好的.xaml文件来完成。

  最典型的例子是“电子相册”功能的Silverlight程序,当我们要写一套程序来处理“网站上所有用户”的电子相册功能,每一个用户的每一本相册当然都会有不同的图片(相片),不可能都是固定的那几张,所以图片的位置、个数,我们事先都不知道,在执行阶段才有可能知道这些信息,因此我们几乎不可能事先写好.xaml文件,而是要在执行阶段动态的产生.xaml代码的内容。

  又或者,我们要用Silverlight建立一个动态菜单,但是如果.xaml代码是固定的,那菜单内的选项、层级、点选后的HyperLink位置显然都无法任意调整,每次调整都要修改.xaml文件,如此一来相当不方便。

  如果我们可以动态产生.xaml文件,就有着无限的可能性,像刚才提到的菜单、电子相册…等功能,我们都可以在ASP.NET程序的执行阶段,动态决定其内容,甚至可以把Silverlight功能包装在UserControl或是WebControl里,如此一来,使用Silverlight就跟使用控件一样简单。

  由於上述种种原因,Silverlight的.xaml文件必须动态产生的需求相当明显。

  在Silverlight 1.0正式版当中,动态产生xaml代码的功能有着相当不错的简单做法,我们称之为“InLine Xaml”。

  过去我们都是利用Blend 2或是Visual Studio 2005先写好.xaml文件,若是通过InLineXaml的方式,我们就不需要受这个限制了,请看底下的.aspx页面:


  通过这样的方式,我们可以把Xaml代码写在.aspx当中,就不需要再额外建立.xaml文件了。

  您可能会说,那这样只是少写一个.xaml文件而已,跟“动态产生”Xaml代码有什么关系?别忘了,我们还有ASP.NET的“RegisterClientScriptBlock()”指令可用。

  我们可通过ASP.NET代码,配上InLine Xaml的功能,即可动态的产生.xaml代码“喂”给xaml控件,以动态显示需要的.xaml内容。例如,请看底下的.aspx页面:


  我们只有在页面当中布置一个Xaml控件(和一个Button,我们希望按下Button之后,可以动态产生出Xaml文件,这个.aspx页面的HTML代码如下:

  接着,我们在按钮上Double-Click,撰写底下代码:

  如此一来,我们连.xaml文件都不需要撰写,就可以在网页上建立出Silverlight的内容:


  这样的好处是,不只少写了一个Xaml文件,更重要的是,我们可以通过ASP.NET的代码,随意的动态建立出程序当中所需要的Xaml内容。

  例如,我们将ASP.NET代码修改如下:


  很轻松的,我们就可以通过ASP.NET代码在Silverlight当中建立出多个Rectangle,甚至用代码调整其位置:


  再修改一下,我们连颜色也可以动态产生:

  执行结果如下:


  

资料来源: Silverlight权威讲座--ASP.NET整合秘技与独家案例剖析(董大伟 - 旗标)



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1836570