Как добавить UserControl динамически, когда у меня есть только имя элемента управления в строковом формате?Silverlight, C # - PullRequest
2 голосов
/ 25 февраля 2011

Я работаю над вызовом различных пользовательских элементов управления, и единственные данные, которые мне дали, - это строка, в которой я вызываю созданный мной пользовательский элемент управления. Когда я знаю имя, я могу жестко написать код, добавить этот элемент управления в код и добавить его динамически таким образом, но когда имя элемента управления передается мне через строку, у меня возникают проблемы при передаче этого моему объект usercontrol и наличие его не будет нулевым ...

Вот мой код:

string userControlName = "ReportFilterOptions";                
Type type = this.GetType();
Assembly assembly = type.Assembly;
UserControl c = (UserControl)assembly.CreateInstance(type.FullName + "." + userControlName);
gridReport.Children.Clear();
gridReport.Children.Add(c);

1 Ответ

2 голосов
/ 25 февраля 2011

Использование System.Activator.CreateInstance .

См. этот пример . Важные части:

// get type of class Calculator from just loaded assembly
Type calcType = testAssembly.GetType("Test.Calculator");

// create instance of class Calculator
object calcInstance = Activator.CreateInstance(calcType);

Вы можете сделать это более удобным для пользователя, перебирая все типы в соответствии со строкой.

Посмотрите вокруг строки 54 этого файла в методе UpdateClassList.

...