Использование MEF для динамического создания приложения с вкладками - PullRequest
0 голосов
/ 13 июня 2010

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

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

                /// Errm???

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

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

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

Ответы [ 4 ]

1 голос
/ 13 июня 2010

У меня нет под рукой 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 голосов
/ 14 июня 2010

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

            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);
            }
0 голосов
/ 13 июня 2010

Вам просто нужно установить свойство 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 голосов
/ 13 июня 2010

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

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

...