我正在尝试构建一个silverlight控件库,客户端可以在其中选择要使用的控件。 Silverlight应用程序项目将具有多个用户控件。结构类似于:
Project
-App.xaml
-MainPage.xaml
--Controls (Folder)
------ControlA.xaml
------ContorlB.xaml
如何从HTML页面引用ControlA或ControlB?它似乎唯一可能引用xap程序集,所以我需要为每个usercontrol创建一个Silverlight应用程序吗?看起来像矫枉过正?
如果我想从库中使用ControlA,那么我希望能够执行以下操作:
<object>
<param name="source" value="ClientBin/Silverlight.xap"/>
<param name="class" value="ControlA"/>
</object>
我知道上面的SL标记不是有效但我觉得你能理解我想要做的事情吗?
答案 0 :(得分:1)
您的Silverlight控件未向HTML公开。 Silverlight应用程序本身只是HTML标记中的<object>
(当然是简化的故事);控件仅在Silverlight应用程序中可用。
您的Silverlight应用和网络标记之间可以进行通信,例如:你可以找到一种让Silverlight应用程序更改的方法来控制它的呈现。
答案 1 :(得分: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();
}