我正在寻找一种方法,用预定义的页面替换我的部分应用程序的内容。我到了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
调用方法中的内容包含在内吗?
答案 0 :(得分:4)
Edit2 :为了能够加载页面,您需要删除内容控件并使用Frame或navigation window。
编辑:我再次阅读了这个问题,并意识到您使用了一个Page,以下解决方案仅适用于用户控件。如果您使用Page对象进行尝试,您仍会收到错误。
要在内容控件中加载用户控件,您可以尝试以下操作:
ContentControl1.Content = new UserControl();
我认为从控件中的主窗口调用方法不是一个好主意,但是如果你想这样做,你可以将Window的一个实例传递给页面构造函数并使用它来调用主窗口。
答案 1 :(得分:2)
对于能够处理用户控件/内容的“事件”的窗口,您必须意识到窗口越少,需要预先知道可以引发的事件。当切换大量页面时,这可能会导致窗口上可能被调用的大量处理程序。
更好的设计是将数据(模型)存储在窗口中,并将设计/代码逻辑存储在操纵数据的用户控件中。您可以通过将数据分配给Window的DataContext属性来轻松获取数据。然后,加载的UserControl的DataContext将返回数据。
此设置将使您获得更好的可维护代码。