0

我更喜欢 MEF,并计划用它来构建一个演示应用程序来加载不同的选项卡。我是 MEF 和 WPF 的初学者,尽管 MEF 正在加载程序集,但我仍然坚持将控件加载到我创建的 TabItem 中。我的代码看起来像这样..

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

                /// Errm???

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

标签是页面,所以我可能做错了,任何帮助将不胜感激。

提前致谢

4

4 回答 4

1

没有方便的智能感知,但我认为您需要将项目的内容设置为您的页面。就像是:

    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);
    }
于 2010-06-12T23:44:56.097 回答
0

这里没有太多细节 - 但基本想法是[Export]每个“页面”,可能在一个自定义类中,为您提供页面标题等。

然后,您将[ImportMany]用于导入页面集合,并为每个导入的页面构建一个“选项卡”。

于 2010-06-12T23:40:44.677 回答
0

您只需要将 TabItem 的 Content 属性设置为页面,如下所示:

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”循环。

于 2010-06-13T03:46:27.173 回答
0

我解决了我的问题,页面只能有框架作为他们的父母,所以添加这个代码解决了这个问题。

            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);
            }
于 2010-06-13T20:47:04.543 回答