好晚了 都睡了把 呵呵.... 偷偷寫部落格玩 呵呵.....
先玩玩上面這個Silverlight的東西
首先看到上面的這個介面,把下面的代碼
<UserControlxmlns="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編輯,改完了點一下直接看的代碼.... 如下。
http://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代碼與之對應......
呵呵,沒錯這些問題..... 我都解決了.....
預知後事如何,且聽下回分解。