如何引用silverlight用户控件?

时间:2010-09-03 05:46:10

标签: silverlight

我正在尝试构建一个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标记不是有效但我觉得你能理解我想要做的事情吗?

2 个答案:

答案 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();
}