gpt4 book ai didi

wpf - 以通用方式从可视化树中删除项目

转载 作者:行者123 更新时间:2023-12-03 23:54:34 24 4
gpt4 key购买 nike

我想从可视化树中删除 FrameworkElement。由于 FrameworkElement 有一个 Parent 属性,很明显可以通过从那里删除它来解决这个问题:

FrameworkElement childElement;
if(childElement != null && childElement.Parent != null) // In the visual tree
{
// This line will, of course not complie:
// childElement.Parent.RemoveFromChildren(childElement);
}

问题是 FrameworkElement 的 Parent 属性是 DependencyObject,它没有 child 的概念。因此,我唯一能看到解决此问题的方法是通过强制转换 Parent 来查看它是否是 Border、Panel 等(具有子元素概念的元素)并将其从那里删除:
FrameworkElement childElement;
if(childElement != null && childElement.Parent != null) // In the visual tree
{
if(childElement.Parent is Panel)
{
(childElement.Parent as Panel).Children.Remove(childElement );
}
if(childElement.Parent is Border)
{
(childElement.Parent as Border).Child = null;
}
}

显然,这不是一个非常灵活的解决方案,而且根本不是通用的。有人可以建议一种更通用的方法来从可视化树中删除元素吗?

最佳答案

我认为没有更简单的方法。实际上,没有一种简单的通用方法可以做到这一点。 WPF非常灵活,您可以使用模板创建自定义控件,该模板需要使用自定义模板在 3 个不同位置显示 3 个子项。

您能做的最好的事情是考虑所有基本控件并将它们包含在您身上 if-else梯子。这些是 Panel , Border , ContentControl , ItemsControl

关于wpf - 以通用方式从可视化树中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396850/

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