Wpf 动态加载选项卡项

Wpf 动态加载选项卡项,wpf,xaml,Wpf,Xaml,我有2个xaml文件:MainWindow.xaml和Subscreen.xaml 我想将Subscreen.xaml作为TabItem动态加载到MainWindow.xaml的TabControl下 每个视图都有一个ViewModel MainWindow.xaml:MainViewModel SubScreen.xaml:子视图模型 以下是测试代码: [TestMethod] public void MyTest2() { // Arrange // Initilize

我有2个xaml文件:MainWindow.xaml和Subscreen.xaml

我想将Subscreen.xaml作为TabItem动态加载到MainWindow.xaml的TabControl下

每个视图都有一个ViewModel

  • MainWindow.xaml:MainViewModel
  • SubScreen.xaml:子视图模型
以下是测试代码:

[TestMethod]
public void MyTest2()
{
    // Arrange

    // Initilize a subVM of CMSEditorViewModel type
    var subVM = new SubViewModel();

    // Initialize a mainVM of CMSEditorMainViewModel type
    var mainVM = new MainViewModel();

    // Initialize a MainWindow of DynamicCMS.Exe.CMSEditor
    var mainWindow = new MyEditor.MainWindow();
    mainWindow.DataContext = mainVM;


    ContentPresenter presenter = new ContentPresenter();
    using (var stream = System.IO.File.OpenRead(CmsPath.DirViewWithBS + "Subscreen.xaml"))
    {
        DataTemplate template = XamlReader.Load(stream) as DataTemplate;
        presenter.ContentTemplate = template;
        presenter.Content = subVM;
    }

    // Create a TabItem of TabControl                
    TabItem item = new TabItem();
    item.Header = "Tab1";
    item.Content = presenter;
    item.Name = "tab1";

    // Get "mainTabControl" TabControl from MainWindow
    CustomTabControl tab = CmsUtil.GetControl((Visual)mainWindow.Content, "mainTabControl") as CustomTabControl;

    // Add TabItem to TabControl
    tab.Items.Add(item);

    // Act
    CustomTabControl customTabControlEditor = (CustomTabControl)CmsUtil.GetControl((Visual)mainWindow.Content, "EditTabControl");

    // Assert
    Assert.IsNotNull(customTabControlEditor);
}
“mainTabControl”是在MainWindow.xaml->中定义的,我可以得到这个“mainTabControl”选项卡控件

“EditTabControl”是在Subscreen.xaml->我无法获取此“EditTabControl”选项卡控件->customTabControlEditor为空中定义的

动态加载的代码中是否有错误?
提前谢谢。

有错误吗?如果您设置了tabcontrol ItemsSource属性怎么办?@Babbillumpa,谢谢您的快速回复。上述动态加载设计已在实际应用中运行。但是当我使用这种动态加载设计编写测试代码时。不管用,不客气,什么不管用?您是否有任何错误或只是没有显示任何内容?没有任何错误。我只能从Subscreen.xaml文件中获取“EditTabControl”控件。