把XAML放在服务端,即改即现.....
好晚了 都睡了把 呵呵.... 偷偷写博客玩 呵呵.....
先玩玩上面这个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代码与之对应......
呵呵,没错这些问题..... 我都解决了.....
预知后事如何,且听下回分解。