以编程方式将UserControl从ContentControl移动到另一个

时间:2012-01-30 10:18:51

标签: c# wpf visual-tree

在WPF应用程序中,我想将UserControl从ContentControl移动到代码中的另一个:

 myContentControl2.Content = myUserControl;

在这种情况下,我收到一个错误:
指定的元素已经是另一个元素的逻辑子元素。首先断开它。

ControlControl class description我可以看到RemoveVisualChild method,但是当我尝试在代码中使用它时,我得到未知方法错误

myContentControl1.RemoveVisualChild(myUserControl);//here I get an "Unknown method" error

我哪里错了?
如何将UserControl从ContentControl移动到代码隐藏中的另一个?

2 个答案:

答案 0 :(得分:2)

myContentControl1.Content = null;

在设置

之前从myContentControl1中删除myUserControl
myContentControl2.Content = myUserControl;

顺便说一句,不要将逻辑树与可视化树混淆。在MSDN中的Trees in WPF中获取更多信息。

答案 1 :(得分:1)

  

在ControlControl类描述中,我可以看到RemoveVisualChild方法,但是当我尝试在代码中使用它时,我得到一个未知方法错误

这是因为RemoveVisualChild和RemoveLogicalChild是受保护的方法,您无法直接在类中访问这些方法。如果要使用此方法,则从ContentControl创建派生类,并使用该类中的某个公共方法包装器公开这些方法。

更好的选择是从myUserControl的逻辑树中删除myContentControl1,然后再添加其他控件的逻辑树。要实现此目的,您可以将Content的{​​{1}}属性设置为其他内容或myContentControl1