星期三, 3月 26, 2008

同一個xap檔..多個silverlight page..

最近在學silverlight時..就發現一個問題..silverlight不是像asp.net不同頁面有不同的檔案..
在silverlight 2 beta裡..vs會把silverlight的project裡的xaml..References和Properties裡的東西
package成一個檔(.xap)在web ap的ClientBin裡..你一編譯就知道..

如果你用silverlight control時..你的Source就要指向ClientBin裡的xap檔..這樣就可以很簡單的看到silverlight的web ap..
問題是..如果要在不同頁面上顯示不同的silverlight..要怎麼辦..難道要在開一個silverlight project呢?..
當然不是啦..這麼笨的方法..沒人會接受的..所以google一下就可以找到相關的解決方法..

App.xaml.cs
private void Application_Startup(object sender, StartupEventArgs e)
{
// Load the main control
//this.RootVisual = new Page();

if (!e.InitParams.ContainsKey("page"))
{
throw new Exception("error");
}
else
{
switch (e.InitParams["page"])
{
case "startPage.aspx":
this.RootVisual = new startPage();
break;
case "endPage.aspx":
this.RootVisual = new endPage();
break;
}
}
}

startPage.aspx or endPage.aspx
<asp:Silverlight ID="Silverlight1" runat="server" Height="400px" Width="800px" Source="~/ClientBin/test.xap"
InitParameters="page=startPage.aspx">

當然startPage.xaml跟endPage.xaml也是要有這些檔案..
這樣就可以簡單的在不同頁面有不同的silverlight ap

ps:
InitParameters集合..這是一個鍵/值對集合..向它傳入初始化參數..可以像這樣丟
"Author=bibby,Url=http://bibby.be,Page=test.aspx"

參考:
http://quickstarts.asp.net/3-5-extensions/reference/silverlightref/P_System_Web_UI_SilverlightControls_Silverlight_InitParameters.aspx
http://silverlight.net/forums/t/10823.aspx
http://www.cnblogs.com/renji/archive/2008/03/07/sl2_InitParams.html

沒有留言: