2010-09-03 67 views
2

我想建立一個Silverlight控件的庫,客戶可以選擇他們想要使用哪個控件。項目將有幾個用戶控件。結構是這樣的:如何引用silverlight用戶控件?

Project 
-App.xaml 
-MainPage.xaml 
--Controls (Folder) 
------ControlA.xaml 
------ContorlB.xaml 

我如何從我的HTML頁面引用ControlA或ControlB?它似乎是唯一可能的引用xap程序集,所以我需要爲每個用戶控件創建一個Silverlight應用程序?似乎過度殺傷?

,如果我想使用庫ControlA,所以我希望能夠做一些事情,如:

<object> 
    <param name="source" value="ClientBin/Silverlight.xap"/> 
    <param name="class" value="ControlA"/> 
</object> 

我知道上面是無效的SL標記,但我認爲你能理解我是什麼試圖做什麼?

+0

你的意思是「參考」作爲訪問類,或在訪問類的實例? – SirDemon 2010-09-03 05:52:01

+0

訪問類 – GMan 2010-09-03 05:52:47

回答

1

您可以擁有一個讀取InitParams的控制器XAML文件。

在HTML傳遞價值的Silverlight:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
     <param name="source" value="ClientBin/SilverlightApplication1.xap"/> 
     <param name="onError" value="onSilverlightError" /> 
     <param name="initparams" value="control=ControlA" /> 
     ... 

而在你的Application_Startup事件中讀出你的價值:

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    var initParams = e.InitParams; 

    if (initParams.Keys.Contains("control")) 
    { 
     if (initParams["control"] == "ControlA") 
     { 
      // Render control A 
      // this.RootVisual = new ControlA(); 
     } else if (initParams["control"] == "ControlB") 
     { 
      // Render control B 
      // this.RootVisual = new ControlB(); 
     } 
    } 

    // Default page.  
    this.RootVisual = new MainPage(); 
} 
+1

使用initparams是很好的,但是對於許多控件來說,一系列'else if'會很難處理。看到這個答案更動態的解決方案:http://stackoverflow.com/questions/2338016/silverlight-how-to-create-a-page-dynamically/2338131#2338131 – AnthonyWJones 2010-09-03 07:56:14

1

您的Silverlight控件不會暴露給HTML。 Silverlight應用程序本身只是HTML標記中的<object>(當然是簡化的故事);這些控件僅在Silverlight應用程序中可用。

您的Silverlight應用程序與網絡標記之間有多種溝通方式,例如,你可以找到一種方法讓Silverlight應用程序改變它控制它的渲染。

+0

我知道,但我怎麼能指定我想要使用標記呈現哪個xaml。似乎我只能指向xap文件而不是其中的控件。 – GMan 2010-09-03 05:55:40

+0

可能最簡單的方法是在標記上使用InitParams(http://msdn.microsoft.com/en-us/library/cc838255%28VS.95%29.aspx)參數。或者,爲了實現更多交互式使用,您可以使用HTML Bridge(http://msdn.microsoft.com/en-us/library/cc645076%28VS.95%29.aspx)在標記頁面和Silverlight應用程序之間進行交互通過Javascript。無論哪種方式,您都必須讓Silverlight應用程序足夠智能來處理輸入並做出適當的反應。 – Jimmy 2010-09-03 06:04:43