问题
In a WPF app I want to move a UserControl from a ContentControl to another one in code:
myContentControl2.Content = myUserControl;
in this case I get an error:
Specified element is already the logical child of another element. Disconnect it first.
In a ControlControl class description I can see a RemoveVisualChild method, but when I try to use it in code I get an Unknown method error
myContentControl1.RemoveVisualChild(myUserControl);//here I get an "Unknown method" error
Where am I wrong?
How to move a UserControl from a ContentControl to another one in code-behind?
回答1:
Set
myContentControl1.Content = null;
to remove myUserControl from myContentControl1 before setting
myContentControl2.Content = myUserControl;
By the way, don't confuse the logical tree with the visual tree. Get more information in Trees in WPF in the MSDN.
回答2:
In a ControlControl class description I can see a RemoveVisualChild method, but when I try to use it in code I get an Unknown method error
This is because RemoveVisualChild
and RemoveLogicalChild are protected methods which you can not access in your class directly. If you want to use this method then create a derived class from ContentControl
and expose these methods using some public method wrapper in that class.
Better option is to remove myUserControl
from logical tree of myContentControl1
before adding it some other control's logical tree. To achieve this you can set the Content
property of myContentControl1
to something else or to null
.
来源:https://stackoverflow.com/questions/9062335/move-a-usercontrol-from-a-contentcontrol-to-another-one-programmatically