从ContentControl中的WPF页面加载内容

时间:2011-03-25 05:56:39

标签: .net wpf

我正在寻找一种方法,用预定义的页面替换我的部分应用程序的内容。我到了ContentControl,但我无法复制我页面中的内容。我使用的代码是

ContentControl1.Content = new PageName().Content

这给了我一个例外,说明 Specified element is already the logical child of another element. Disconnect it first.

我有什么方法可以在ContentControl

中加载页面

或者,有没有办法可以使用Visual Studio设计器来设计页面并以更容易加载ContentControl的方式存储它们?

最后,这将是我的一天,但是有什么方法可以让ContentControl中包含它的Window调用方法中的内容包含在内吗?

2 个答案:

答案 0 :(得分:4)

Edit2 :为了能够加载页面,您需要删除内容控件并使用Framenavigation window

编辑:我再次阅读了这个问题,并意识到您使用了一个Page,以下解决方案仅适用于用户控件。如果您使用Page对象进行尝试,您仍会收到错误。

要在内容控件中加载用户控件,您可以尝试以下操作:

ContentControl1.Content = new UserControl();

我认为从控件中的主窗口调用方法不是一个好主意,但是如果你想这样做,你可以将Window的一个实例传递给页面构造函数并使用它来调用主窗口。

答案 1 :(得分:2)

对于能够处理用户控件/内容的“事件”的窗口,您必须意识到窗口越少,需要预先知道可以引发的事件。当切换大量页面时,这可能会导致窗口上可能被调用的大量处理程序。

更好的设计是将数据(模型)存储在窗口中,并将设计/代码逻辑存储在操纵数据的用户控件中。您可以通过将数据分配给Window的DataContext属性来轻松获取数据。然后,加载的UserControl的DataContext将返回数据。

此设置将使您获得更好的可维护代码。