【问题标题】:Move a UserControl from a ContentControl to another one programmatically以编程方式将 UserControl 从 ContentControl 移动到另一个
【发布时间】:2012-01-30 10:18:51
【问题描述】:

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

 myContentControl2.Content = myUserControl;

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

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

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

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

【问题讨论】:

  • @Maheep:是的,我回答了。
  • @Clemens:是的。我更新的内容与您的答案相同。但我独立尝试了解决方案并进行了更新。我同意您的回答已被接受。但很高兴我也学会了。

标签: c# wpf visual-tree


【解决方案1】:

设置

myContentControl1.Content = null;

在设置之前从 myContentControl1 中删除 myUserControl

myContentControl2.Content = myUserControl;

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

【讨论】:

  • 是的,它有效,谢谢!你关于树的注释也很有帮助,+1
【解决方案2】:

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

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

更好的选择是从myContentControl1 的逻辑树中删除myUserControl,然后再将其添加到其他控件的逻辑树中。为此,您可以将myContentControl1Content 属性设置为其他值或null

【讨论】:

  • 感谢您明确说明使用受保护的方法,+1
猜你喜欢
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多