gpt4 book ai didi

c# - WPF FrameworkElement 父级和移动 UIElement

转载 作者:太空狗 更新时间:2023-10-29 21:31:08 24 4
gpt4 key购买 nike

我正在尝试将一个控件从一个父级移动到另一个父级(我不太确定这是否可行)。我可以捕获我想要移动的控件。这是我的代码:

public void MoveElement(UIElement uiElement)
{
var element = ((FrameworkElement)uiElement).Parent;
//TODO:Remove from parent
myControl.Children.Add(uiElement);
}

当我点击最后一条语句时,会抛出一个 ArgumentException,指出“指定的 Visual 已经是另一个 Visual 的子项或 CompositionTarget 的根”。奇怪的是 Parent 返回 null。如何找到 parent ?这会起作用吗?

编辑: 我不认为实际移动一个元素是我的问题的答案。我正在使用 Visual Studio SDK,并且能够获取构成编辑器 Pane (扩展 DockPanel)的 UIElement。我试图将控件从标准编​​辑器移动到我正在开发的自定义工具窗口中。

这被证明是一个 hack,我意识到我需要同一个控件的多个实例,所以我认为一个更复杂的解决方案(和更少的 hack)已经存在。

最佳答案

Parent 属性指的是逻辑树,文档指出“在实例化元素但未附加到最终连接到页面级根元素,或应用程序对象。”例如,在 ListBox 中实例化的 DataTemplate 的根元素有一个空父元素。

尝试改用 VisualTreeHelper.GetParent。可视化树是 WPF 元素组织方式的较低级别表示,并使您可以访问模板等东西扔在那里的所有额外“位”。例如,在 ListBox 中实例化的 DataTemplate 的根元素上调用 VisualTreeHelper.GetParent 会返回一个 ContentPresenter

请注意,仅仅因为您可以获得父视觉对象并不一定意味着您可以将其移除。某些元素(例如面板)为此提供了方法。但是,如果您找到的元素是 CheckBox 的一部分,我认为您将无法删除它。

如果您可以通过围绕可视化树移动控件来为您尝试实现的目标提供更多背景信息,人们可能会提供更具体的建议或替代方法。

关于c# - WPF FrameworkElement 父级和移动 UIElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com