把XAML放在服務(wù)端,即改即現(xiàn).....

好晚了 都睡了把 呵呵.... 偷偷寫博客玩 呵呵.....
先玩玩上面這個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>復(fù)制到上面的文本框里,然后點擊“顯示界面按鈕”....... 呵呵,沒錯,界面就顯示了。
........。
不過更好玩的事情是,任意你給一份XAML,只要符合一下三個條件,把XAML復(fù)制到文本框里,然后點擊顯示界面按鈕,都能顯示該界面。
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); } }哈哈..... 代碼好簡單啊.....。
我的目標:即改即現(xiàn)。
在我們實際的開發(fā)中,我們的XAML哪怕只做了一個非常小的更改,我們想看看效果,都必須經(jīng)過編譯階段。XAML必須重新打包近XAP。隨著項目越來越大,編譯和打包的時間也會越來越長。當項目比較大的時候,我們哪怕做一個非常小的功能的更改,都必須要整個重新生成一個新的XAP包。
而即改即現(xiàn)的意思,就是改了之后,不要編譯,馬上就能看到效果。
比如上面的小例子,幾行代碼實現(xiàn)了一個簡單版本的”即改即現(xiàn)“。你把XAML做任意的符合條件的改動,點擊一下按鈕,效果即可出來。
當然上面那個東西不能實際做項目用,實際的項目開發(fā)當中,我們的Xaml當然不能在那個小小的文本框里編輯,最好用Blend編輯。(在這插句題外話.... 有朋友覺得學(xué)習(xí)Silverlight可以不用Blend,這絕對錯誤的觀念。)
所以,如果能用Blend編輯XAML,并且能點個按鈕,0.5秒內(nèi)看到改的效果,我想那一定是件爽事。
上代碼了呵呵
沒錯,上面我所說的,用Blend編輯,改完了點一下直接看的代碼.... 如下。
https://files.cnblogs.com/MySilverlight/demo2.xap
代碼說明:
1:在你打開這份代碼之后,注意找到 ......\demo2\SilverlightApplication2.web\ClientBin\MyXaml\XamlShow 這個目錄。這個目錄下你會找到一個解決方案,請用Blend打開它。
2:打開之后 如圖,找到三個可以即改即現(xiàn)的XAML。先 打開UserControl1.xaml
3:打開 SilverlightApplication2.sln,用VS打開。然后瀏覽Default.aspx頁面?;蛘吒纱喟碏5,你會看到如下界面
點擊顯示界面按鈕,你會看到UserControl1的XAML加載后的界面。呵呵 是不是和Blend里一模一樣??
沒錯,這事即改即現(xiàn)的.
你可以把這個UserControl1改為 UserControl2 或者 UserControl3.并且這三個文件都是即改即現(xiàn)的。注意Blend里編輯完之后要按Ctrl+s保存一下。
后話
這樣對待我們的XAML,是不是感覺方便很多??當然,如果這種方式只能給我們改改XAML,只能當游戲玩玩,那我這文章也沒啥價值了.... 如果在實際的開發(fā)中,真把XAML像這樣放在服務(wù)端.....
你會問,這樣把XAML放在服務(wù)端,那資源字典(樣式文件)怎么半呢? 圖片的加載怎么辦呢? 在Blend里能顯示圖片,這個用這種機制還能顯示嗎??要引用第三方DLL咋辦?? 這里的路徑只有一個Test文件夾,可如果Test文件夾下有多個目錄怎么半???
不過我知道,這里最大的難題,是.... CS文件怎么辦? 要知道一個XAML,在我們之前的開發(fā)中,都要對應(yīng)一個CS文件的。即便是用MVVM,這個頁面也要有相應(yīng)的CS代碼與之對應(yīng)......
呵呵,沒錯這些問題..... 我都解決了.....
預(yù)知后事如何,且聽下回分解。


浙公網(wǎng)安備 33010602011771號