2010-09-03 4 views
2

Я пытаюсь создать библиотеку элементов управления silverlight, где клиент может выбрать, какой элемент управления они хотят использовать. Проект Silverlight будет иметь несколько пользовательских элементов управления. Структура выглядит примерно так:Как ссылаться на пользовательский контроль silverlight?

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

Как я могу ссылаться на ControlA или ControlB с моих HTML-страниц? Кажется, что его можно только ссылаться на сборки xap, так что мне нужно создать приложение Silverlight для каждого usercontrol? Кажется, это излишний?

Если я хотел использовать ControlA из библиотеки, поэтому я хочу, чтобы иметь возможность сделать что-то вроде:

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

Я знаю, выше, не является действительным SL наценка, но я думаю, вы можете понять, что я пытаясь сделать?

+0

ли вы имеете в виду «ссылку», как в плане доступа к классу, или как в доступе к экземплярам класса? – SirDemon

+0

Доступ к классу – GMan

ответ

1

У вас может быть файл XAML контроллера, который читает InitParams.

Передайте значение в 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

1

Элементы управления Silverlight не отображаются в HTML. Само приложение Silverlight - это просто <object> в разметке HTML (конечно, упрощенная история); элементы управления доступны только в приложении Silverlight.

Существуют способы связи между вашим приложением Silverlight и веб-разметкой, например. вы можете найти способ изменить приложение Silverlight, которое контролирует его рендеринг.

+0

Я знаю, но как я могу указать, какой xaml я хочу сделать с помощью тега . Похоже, я могу указать только на файл xap, а не на элементы управления внутри. – GMan

+0

Вероятно, самый простой способ - использовать параметр InitParams (http://msdn.microsoft.com/en-us/library/cc83825%28VS.95%29.aspx) в теге . Кроме того, для более интерактивного использования вы можете использовать HTML-мост (http://msdn.microsoft.com/en-us/library/cc645076%28VS.95%29.aspx) для взаимодействия между вашей страницей разметки и вашим приложением Silverlight через Javascript. В любом случае, вы должны будете иметь приложение Silverlight достаточно умным, чтобы обрабатывать ввод и реагировать соответствующим образом. – Jimmy

Смежные вопросы