把XAML放在服务端,即改即现.....

好晚了  都睡了把 呵呵....  偷偷写博客玩  呵呵.....

获取 Microsoft Silverlight

先玩玩上面这个Silverlight的东西

      首先看到上面的这个界面,把下面的代码

  

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
	
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White">
		<ed:BlockArrow Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="50" Margin="112,48,0,0" Orientation="Right" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="100"/>
		<ed:Callout AnchorPoint="0,1.25" CalloutStyle="Oval" Content="Callout" Fill="#FFF4F4F5" FontSize="14.666999816894531" Height="100" Margin="248,48,192,0" Stroke="Black" VerticalAlignment="Top"/>
		<ed:RegularPolygon Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" InnerRadius="0.47211" Margin="64,0,0,116" PointCount="5" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Bottom" Width="100"/>
	</Grid>
</UserControl>

  复制到上面的文本框里,然后点击“显示界面按钮”.......   呵呵,没错,界面就显示了。

     ........。

     不过更好玩的事情是,任意你给一份XAML,只要符合一下三个条件,把XAML复制到文本框里,然后点击显示界面按钮,都能显示该界面。

 1:XAML格式良好,根为Page或者UserControl。

 2:没有x:Class..  这个

 3:注意你的XAML没有引用第三方的类库。

 .....  没错,你任意放修改XAML,然后点击按钮,就会显示界面。

 

 

源代码如下.....    因为代码实在太简单,就不往包里整了。

下面是按钮点击的代码。

private void button1_Click(object sender, RoutedEventArgs e)
        {
            string xaml = textBox1.Text;
            try
            {
                UserControl uc = System.Windows.Markup.XamlReader.Load(xaml) as UserControl;
                ChildWindow c = new ChildWindow();
                c.Content = uc;
                c.Show();
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }

  哈哈.....  代码好简单啊.....。

     

 我的目标:即改即现。

      在我们实际的开发中,我们的XAML哪怕只做了一个非常小的更改,我们想看看效果,都必须经过编译阶段。XAML必须重新打包近XAP。随着项目越来越大,编译和打包的时间也会越来越长。当项目比较大的时候,我们哪怕做一个非常小的功能的更改,都必须要整个重新生成一个新的XAP包。

      而即改即现的意思,就是改了之后,不要编译,马上就能看到效果。

      比如上面的小例子,几行代码实现了一个简单版本的”即改即现“。你把XAML做任意的符合条件的改动,点击一下按钮,效果即可出来。

      当然上面那个东西不能实际做项目用,实际的项目开发当中,我们的Xaml当然不能在那个小小的文本框里编辑,最好用Blend编辑。(在这插句题外话....  有朋友觉得学习Silverlight可以不用Blend,这绝对错误的观念。)

      所以,如果能用Blend编辑XAML,并且能点个按钮,0.5秒内看到改的效果,我想那一定是件爽事。

 

 上代码了呵呵

      没错,上面我所说的,用Blend编辑,改完了点一下直接看的代码....    如下。

    https://files.cnblogs.com/MySilverlight/demo2.xap

    

 代码说明:

      1:在你打开这份代码之后,注意找到  ......\demo2\SilverlightApplication2.web\ClientBin\MyXaml\XamlShow   这个目录。这个目录下你会找到一个解决方案,请用Blend打开它。

      2:打开之后  如图,找到三个可以即改即现的XAML。先 打开UserControl1.xaml

       

 

3:打开  SilverlightApplication2.sln,用VS打开。然后浏览Default.aspx页面。或者干脆按F5,你会看到如下界面  

   

 

点击显示界面按钮,你会看到UserControl1的XAML加载后的界面。呵呵 是不是和Blend里一模一样?? 

没错,这事即改即现的.

你可以把这个UserControl1改为 UserControl2 或者 UserControl3.并且这三个文件都是即改即现的。注意Blend里编辑完之后要按Ctrl+s保存一下。

  后话

   这样对待我们的XAML,是不是感觉方便很多??当然,如果这种方式只能给我们改改XAML,只能当游戏玩玩,那我这文章也没啥价值了....     如果在实际的开发中,真把XAML像这样放在服务端.....

   你会问,这样把XAML放在服务端,那资源字典(样式文件)怎么半呢?   图片的加载怎么办呢?   在Blend里能显示图片,这个用这种机制还能显示吗??要引用第三方DLL咋办?? 这里的路径只有一个Test文件夹,可如果Test文件夹下有多个目录怎么半???

   不过我知道,这里最大的难题,是....    CS文件怎么办?   要知道一个XAML,在我们之前的开发中,都要对应一个CS文件的。即便是用MVVM,这个页面也要有相应的CS代码与之对应......     

    呵呵,没错这些问题.....  我都解决了.....      

   预知后事如何,且听下回分解。

 

 

 

 

 

            

posted @ 2012-05-26 01:57  银光小子  阅读(2384)  评论(4编辑  收藏  举报