我更倾向于使用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);
}
标签是Pages,所以我可能完全错了,任何帮助都会受到赞赏。
提前致谢
答案 0 :(得分: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);
}
答案 1 :(得分:0)
这里没有太多细节 - 但基本的想法是[Export]
每个“页面”,可能在一个自定义类中,为您提供页面标题等。
然后,您可以使用[ImportMany]
导入一组页面,并为每个导入的页面构建一个“标签”。
答案 2 :(得分: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”循环。
答案 3 :(得分:0)
我解决了我的问题,Pages只能将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);
}