更改窗口(WPF)的内容

我创建了一个简单的WPF应用程序,它有两个Windows。 用户在第一个窗口中填写一些信息,然后单击“确定”,这将把它们带到第二个窗口。 这工作正常,但我试图将两个Windows合并到一个窗口,所以只是内容更改。

我设法在更改窗口内容时找到此资源管理,这似乎是我所追求的。 但是,我已经搜索了ContentPresenter,但找不到我需要如何使用它的帮助。 例如,如果我使用ContentPresenter,我在哪里放置两个Windows中的现有XAML元素? 我猜第一个Window将进入ContentPresenter,但第二个将需要放在需要切换的地方。

任何帮助都会很棒。 一个简单的工作示例会更好。

TIA

在重新安排现有控件时通常使用ContentPresenter 。 它是放置控件内容的地方。 相反,您应该使用ContentControl ,它只是一个具有内容元素的控件。 或者,您可以直接设置窗口的内容。

您将两个现有窗口的内容解压缩为两个UserControl。 然后创建一个新窗口来托管内容。 根据您的业务逻辑,您可以将该窗口的内容(或该窗口的ContentControl,如果您需要其他“主”内容)设置为这两个UserControl中的任何一个。

编辑:

作为一个起点。 这不是完整的工作代码,只是为了让您入门。 请注意,这是糟糕的架构; 一旦你开始运行,你应该使用MVVM或类似的方法!

        

在Window背后的代码中:

 // Somewhere, ex. in constructor this.ContentHolder.Content = new MyFirstUserControl; // Somewhere else, ex. in reaction to user interaction this.ContentHolder.Content = new MySecondUserControl; 

我使用ContentPresenter进行内容捕捉。 在窗口中,我放了这样的东西:

  

在视图模型中,我有一个名为MainContent的属性对象:

 public object MainContent { get { return (object)GetValue(MainContentProperty); } set { SetValue(MainContentProperty, value); } } public static readonly DependencyProperty MainContentProperty = DependencyProperty.Register("MainContent", typeof(object), typeof(SomeViewModel), new FrameworkPropertyMetadata(null)); 

无论你设置什么MainContent将显示在窗口中。

为了保持视图和视图模型之间的分离,我通常将MainContent属性设置为另一个视图模型,并使用数据模板将该视图模型映射到视图:

    

我把这个数据模板放在一些中央资源字典中,还有一堆其他视图模型到视图的映射器。