Essential Silverlight翻譯連載---第二章 續2
在我們對Silverlight進行深入研究之前,對模板裏的文件來個近距離接觸。我們並不打算講解XAML文件(包括與之關聯的JavaScript腳本),因爲它包含了很多本書不曾討論的技術。讓我們從Default.html文件開始,它就包含在例2-1內。
例2-1:HTML文件(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的語法如下:(JSON:JavaScript Object Notation,做爲Javascript語法的一部份。譯者注:JSON即一種開放式和基於文本的數據交換格式,它提供了一種標準數據交換格式,更適用於 Ajax 樣式的 Web 應用程序。)
{property1: "value1",property2: "value2", ...}
各參數作用如下:
parentElement
顯示Silverlight內容的頁面中的<div>標籤中的ID屬性所指的值。
source
將要載入的XAML文件的URL。
id
Silverlight內容的標識,將在後面幫助JavaScript訪問Silverlight。
properties
一系列的屬性值,包括舞臺的尺寸(width,height),背景顏色(background)
version
運行示例所需的Silverlight插件的版本。
Events屬性用於關聯事件,將在第5章進行詳細講述。不管怎麼樣,您需要設置onError:null以避免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屬性內提供正確的XAML的URL。代碼如例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-16是Mac OS X操作系統中的升級對話框)。它甚至有可能會自動升級,這取決於操作系統和配置。
進階讀物
http://silverlight.net/GetStarted/
這裏有開始學習Silverlight所需的資源。
http://silverlight.net/quickstarts/
Silverlight的快速入門所需涉及的資料
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.