透過ASP.NET程式化控制Silverlight內容

XAML是一種典型的XML文件,我們可以透過ASP.NET的後端程式碼,對其進行存取,並且將調整後的內容指定給Silverlight控制項進行呈現,這裏來看看如何進行相關的操作,底下是一個XAML檔案,它的用途,是提供預先準備好的XAML內容,讓我們可以將其載入記憶體,透過後端程式碼建立一個記憶體的副本,然後再針對此副本作修改,最後由Silverlight進行解譯。

<Canvas … >
<Rectangle
x:Name="rct"
Width="200" Height="100" …/>
</Canvas>

緊接著我們看看用來呈現Silverlight內容的網頁檔案:

<body>
<form id="form1" runat="server">
<div id='ControlHost' >
</div>
<script type='text/javascript'>
var parentElement =document.getElementById("ControlHost");
createMySilverlightPlugin("XamlPage.aspx");
</script>
</form>
</body>

這個檔案最重要的地方,是引用createMySilverlightPlugin方法的這一行程式碼,其中設定了XAML檔案的來源為XamlPage.aspx,這個網頁會建立所要呈現的XAML檔案內容,以aspx網頁取代我們所慣用的xaml。
最後,建立用來存取XAML內容的程式碼,輸入以下的內容:

public partial class XamlPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("xaml/Rect.xaml"));
XmlNamespaceManager namespaceM =
new XmlNamespaceManager(new NameTable());

string dxmlns = "…"; //預設命名空間
string xxmlns = "… …"; //延伸命名空間
namespaceM.AddNamespace("d", dxmlns);
namespaceM.AddNamespace("x", xxmlns);

XmlNode nodeCanvas = xmlDoc.SelectSingleNode(
"//d:Canvas[@x:Name='dCanvas']", namespaceM);
XmlNode node = nodeCanvas.SelectSingleNode(
"//d:Rectangle[@x:Name='rct']", namespaceM);
node.Attributes["Width"].Value = "50";

Response.ContentType = "text/xml";
Response.Write(xmlDoc.OuterXml);
}
}

上述的程式碼首先建立XmlDocument物件,並且載入預先準備好的XAML文件,然後建立所需的命名空間,取得其中用來建立矩形物件的節點,並且修改它的寬度屬性。
這篇文章簡短的討論了ASP.NET程式化控制Silverlight的關鍵步驟,無論如何,還有其他更多的細節與進一步的作法,在即將出版的【Silverlight-ASP.NET與AJAX開發實務】,我們會有完整的探討。

沒有留言: