2010-06-12 3 views
0

Я скорее возьмусь с MEF и планирую использовать его для создания демонстрационного приложения для загрузки разных вкладок. Я начинаю работу в MEF и WPF, и хотя MEF загружает сборки, я застреваю при загрузке элементов управления в TabItem, который я создал. Мой код выглядит Ы, как это ..Использование MEF для динамического создания динамического приложения

  foreach (var page in pages) 
      { 
       TabItem item = new TabItem(); 
       item.Header = page.PageTitle; 

       /// Errm??? 

       // Add each page 
       tcPageControl.Items.Add(item); 
      } 

Вкладки страниц, так что я мог бы делать это совершенно неправильно, и любая помощь будет оценена.

Заранее спасибо

+0

Не могли бы вы разместить более полный пример кода? Если вы включите, как импортируете и экспортируете детали, которые действительно помогут нам вам помочь. –

+0

Не вопрос MEF - вопрос о том, как динамически устанавливать визуальные элементы в WPF, как вы сказали, приложение загружает сборки. – Robaticus

ответ

1

Не используйте intellisense, но я думаю, вам нужно установить содержание элемента как своей страницы. Что-то вроде:

foreach (var page in pages) 
    { 
     TabItem item = new TabItem(); 
     item.Header = page.PageTitle; 

     item.Children.Add(page); 
     //or item.Grid.Children.Add(page) or something like that. 

     // Add each page 
     tcPageControl.Items.Add(item); 
    } 
0

Там не много деталей здесь - но основная идея будет [Export] каждой «страницы», возможно, в пользовательском классе, который дает вам заголовки страниц и т.д.

You Затем используйте [ImportMany], чтобы импортировать коллекцию страниц и создать «вкладку» для каждой импортированной страницы.

+0

Этот бит, я думаю, работает, в это добавление каждого содержимого страницы в элемент управления, который терпит неудачу. – Mmarquee

0

Вам просто нужно установить Content свойство вашего TabItem быть страницы, как это:

foreach (var page in pages) 
{ 
    TabItem item = new TabItem(); 
    item.Header = page.PageTitle; 

    item.Content = page; 

    tcPageControl.Items.Add(item); 
} 

Здесь гораздо более элегантный способ кодировать его с помощью LINQ:

tcPageControl.ItemsSource = 
    from page in pages 
    select new TabItem 
    { 
    Header = page.PageTitle, 
    Content = page, 
    }; 

В целом в WPF вам никогда не придется писать цикл «foreach», если вы правильно структурируете свой код.

0

Я решил свою проблему, страницы могут иметь только Frames в качестве их родителей, поэтому добавление этого кода адресует его.

  foreach (var page in pages) 
      { 
       TabItem item = new TabItem(); 
       item.Header = page.PageTitle; 

       // Now add some controls 

       Frame frame = new Frame(); 

       frame.Content = page.View; 

       item.Content = frame; 

       // Add each page 
       tcPageControl.Items.Add(item); 

       //tcPageControl.Children.Add(view.Value); 
      } 
Смежные вопросы