Essential Silverlight翻譯連載---第二章 續2

在我們對Silverlight進行深入研究之前,對模板裏的文件來個近距離接觸。我們並不打算講解XAML文件(包括與之關聯的JavaScript腳本),因爲它包含了很多本書不曾討論的技術。讓我們從Default.html文件開始,它就包含在例2-1內。
2-1HTML文件(Default.html.js)示例
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
     <title>SilverlightJSApplication1</title>
 
     <script type="text/javascript" src="Silverlight.js"></script>
     <script type="text/javascript" src="Default.html.js"></script>
     <script type="text/javascript" src="Scene.xaml.js"></script>
</head>
 
<body>
     <div id="SilverlightPlugInHost">
         <script type="text/javascript">
              createSilverlight();
         </script>
     </div>
</body>
</html>(譯者注:本例及其後代碼將全部從我的VS2005上拷貝出來,有可能會跟原版稍有不同)
這個文件做了以下幾件事情:
l         Silverlight.js輔助類庫做爲<script>元素載入。
l         Default.html.js這個JavaScript文件(Default.html的“code-behind”腳本)做爲<script>元素載入。
l         Scene.xaml.js這個JavaScript文件(XAML示例文件的“code-behind”腳本)做爲<script>元素載入。
l         這個頁面包含了一個ID爲“SilverlightPlugInHost”的<div>元素,稍後將由它控制Silverlight的內容。
l         執行JavaScript方法createSilverlight()(它被定義在Default.html.js文件內)
您特別需要注意<div>標籤的ID屬性的內容,因爲在後面它將控制Silverlight。您需要顯式地告訴JavaScript(包括Silverlight)插件這些內容放在哪裏。這項工作在Default.html.js文件內完成,如例2-2
2-2:載入Silverlight內容的JavaScript文件(Default.html.js
function createSilverlight()
{
     var scene = new SilverlightJSApplication1.Scene();
     Silverlight.createObjectEx({
         source: 'Scene.xaml',
         parentElement: document.getElementById('SilverlightPlugInHost'),
         id: 'SilverlightPlugIn',
         properties: {
              width: '400',
              height: '400',
              background:'#ffffff',
            isWindowless: 'false',
              version: '1.0'
         },
         events: {
             onError: null,
              onLoad: Silverlight.createDelegate(scene, scene.handleLoad)
         },      
         context: null
     });
}
 
if (!window.Silverlight)
     window.Silverlight = {};
 
Silverlight.createDelegate = function(instance, method) {
     return function() {
        return method.apply(instance, arguments);
    }
}
正如您所見,CreateSilverlight()方法是在Default.html.js中定義的。它首先實例化一個Silverlight.Scene對象,此刻我們還不需要它。接下來執行Silverlight.createObjectEx()方法,這個方法專門用於對幫助瀏覽器插件初始化並載入XAML內容。這個方法聲明瞭一個對象做爲控制所有的相關信息參數。這個JSON的語法如下:(JSONJavaScript Object Notation,做爲Javascript語法的一部份。譯者注:JSON即一種開放式和基於文本的數據交換格式,它提供了一種標準數據交換格式,更適用於 Ajax 樣式的 Web 應用程序。
{property1: "value1",property2: "value2", ...}
各參數作用如下:
parentElement
顯示Silverlight內容的頁面中的<div>標籤中的ID屬性所指的值。
source
將要載入的XAML文件的URL
id
Silverlight內容的標識,將在後面幫助JavaScript訪問Silverlight
properties
一系列的屬性值,包括舞臺的尺寸(widthheight),背景顏色(background
version
運行示例所需的Silverlight插件的版本。
Events屬性用於關聯事件,將在第5章進行詳細講述。不管怎麼樣,您需要設置onErrornull以避免JavaScript錯誤。由於模板裏的代碼比較複雜,我們現在就自己創建第一個Silverlight應用程序吧。創建一個新的XML文件並命名爲HelloWorld.xaml。所有Silverlight XAML文件的根元素是<Canvas>(可以比喻爲HTML中的<div>元素或ASP,NET中的<asp:Panel>)。在那,您將放置一個橙色的方塊(<Rectangle>)元素和一個文字塊(<TextBlock>元素)。最後代碼如例2-3所示:
2-3:一個簡單的Hello World XAML文件(HelloWorld.xaml
<Canvasxmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <RectangleWidth="300"Height="150"Stroke="Orange"StrokeThickness="15" />
    <TextBlockFontFamily="Arial"FontSize="56"Canvas.Left="25"Canvas.Top="40"
               Foreground="Black"Text="Silverlight" />
</Canvas>
譯者著:作者對這第一個例子交待得很不清楚,並且按照他所提供的代碼所完成的程序也不能運行。在VS2005中沒有創建xaml文件的項,所以這段代碼我放到了模板自帶的Scene.xaml文件內。把Scene.xaml文件裏的所有代碼刪除並使用例2-3代碼即可
代碼提示將幫助您完成代碼的輸入,如圖2-14所示。
下一個需要創建的文件是Default.html.js,它包含createSilverlight()方法。您可以使用原來的Default.html.js文件,並把它的所有不需要的元素刪除(實例化跟場影關聯的外部JavaScript代碼)。不要忘記在source屬性內提供正確的XAMLURL。代碼如例2-4所示。
2-4 簡單的Hello World XAML文件(HelloWorld.xaml
譯者注:這裏應該是JavaScript文件Default.html.js
function createSilverlight()
{
     var scene = new HelloWorld.Scene();
     Silverlight.createObjectEx({
         source: 'Scene.xaml',
         parentElement: document.getElementById('SilverlightPlugInHost'),
         id: 'SilverlightPlugIn',
         properties: {
              width: '400',
              height: '400',
              background:'#ffffff',
            isWindowless: 'false',
              version: '1.0'
         },
         events: {
             onError: null,
              onLoad: Silverlight.createDelegate(scene, scene.handleLoad)
         },      
         context: null
     });
}
 
Silverlight.createDelegate = function(instance, method) {
     return function() {
        return method.apply(instance, arguments);
    }
}
譯者注:使用原版代碼,程序無法正確運行,有一些代碼不能刪,這裏把這些代碼加了進去。或許是因爲我對整個Silvrelight的體系結構還不熟悉,導致無法運行作者的代碼,等將來完全瞭解後再回來改這段
瀏覽器運行這段代碼就好象施了魔法。如果您還沒有安裝Silverlight插件,將會彈出提示讓您安裝,如果安裝了就會看到圖2-15所示的文本和橙色矩形。
 
我們還差一個Silverlight.js文件沒介紹。這個JavaScript類庫的功能爲:偵測網頁瀏覽器是否存在(unfortunately, it has the same habit as ASP.NET AJAX and only accepts Firefox of all the Mozilla browsers, e.g., Netscape, SeaMonkey, and others 譯者注:這段原文不知道是否有錯,感覺有些不對頭,只放原文上來吧)。提供Silverlight.createObjectEx()方法並且幫助應用程序使用JavaScript API訪問Silverlight內容(詳見第8章)。只需要把Silverlight.js文件拷貝到Silverlight應用程序中就可以實現這項功能。
Silverlight版本更新的速率可能會非常地快。默認情況下,Silverlight會第天檢查一次是否有新版本(只要用戶訪問帶有Silverlight內容的站點)。如果有新的版本,會提示用戶下載並安裝新的插件(圖2-16Mac OS X操作系統中的升級對話框)。它甚至有可能會自動升級,這取決於操作系統和配置。
 
進階讀物
http://silverlight.net/GetStarted/
這裏有開始學習Silverlight所需的資源。
http://silverlight.net/quickstarts/
Silverlight的快速入門所需涉及的資料
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章