使用 MEF 动态构建选项卡式应用程序

发布于 2024-09-05 09:23:09 字数 461 浏览 7 评论 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);
            }

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

提前致谢

I'm rather taken with MEF and plan to use it to build a demo application to load different tabs. I am a begineer at MEF and WPF and although MEF is loading the assemblies I'm stuck at loading the controls into the TabItem I have created. My code looks a bt like this ..

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

                /// Errm???

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

The tabs are Pages, so I might be doing it totally wrong, and any help would be appreciated.

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

薄荷港 2024-09-12 09:23:09

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

    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);
    }

Don't have intellisense handy, but I think you need to set the content of the item to be your page. Something like:

    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);
    }
长发绾君心 2024-09-12 09:23:09

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

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

There aren't many details here - but the basic idea would be to [Export] each "page", potentially within a custom class that gives you page titles, etc.

You'd then use [ImportMany] to import a collection of pages, and build a "tab" for each imported page.

メ斷腸人バ 2024-09-12 09:23:09

您只需将 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 中,如果您构建自己的 TabItem 结构,则无需编写“foreach”循环。正确编码。

You simply need to set the Content property of your TabItem to be the page, like this:

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

  item.Content = page;

  tcPageControl.Items.Add(item); 
} 

Here is a much more elegant way to code it using LINQ:

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

In general in WPF you never have to write a "foreach" loop if you structure your code correctly.

妳是的陽光 2024-09-12 09:23:09

我解决了我的问题,页面只能将框架作为其父级,因此添加此代码可以解决该问题。

            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);
            }

I solved my problem, Pages can only have Frames as their parents, so adding this code addresses it.

            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);
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文