2012-01-17 9 views
1

В моем приложении WPF у меня есть таблица, в которой хранятся часто используемые имена окон для каждого пользователя. В runtiime я делаю список.Открытый пользовательский контроль во время выполнения WPF?

List<string> LstUserWindows= new List<string>(); 

Что мне нужно, мне нужно открыть каждое окно в зависимости от имен окон в списке. (Я использую usercontrols как окна). Что-то, как показано ниже:

foreach (var rec in LstUserWindows) 
{ 
     UserControl mainUC = this.FindName(rec.MyWindow) as UserControl; 
     displayUserControls(mainUC,null); 
} 

ответ

1

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

  1. Если все UserControl экземпляров уже существуют в интерфейсе, но просто скрыты, то вы должны быть в состоянии использовать FindName(...) (как вы упомянули в своем вопросе), а затем изменить Visibility свойства UserControl.

  2. Если вы еще не загрузили экземпляры UserControl и хотите динамически создать элемент управления с учетом его имени, вам необходимо изучить его с помощью Reflection. Используя этот подход, вы можете получить информацию Type от Assembly и работать с использованием Reflection для построения объекта. В качестве альтернативы вы можете использовать класс Activator для создания экземпляра требуемого типа управления. Для этого подхода вы бы сделали что-то подобное.

    foreach (var rec in LstUserWindows) 
    { 
        UserControl control = (UserControl)System.Activator.CreateInstance("AssemblyName", rec); 
        displayUserControls(control, null); 
    } 
    

Примечание: Я не уверен, что если структура параметров является правильным (я не могу в настоящее время проверить его). Обратитесь к MSDN Documentation за дополнительной помощью.