我可能会误解WPF中装饰器层的概念,但是我设法在TextBlock的装饰器层中添加了StackPanel

如何清除装饰层?因此,例如StackPanel的装饰器层中不再有TextBlock了吗?

最佳答案

老问题了,但是我只是遇到了同样的问题:
AdornerLayers由多个UIElement共享。要访问任何ui元素(更具体而言,是任何Visual元素)的AdornerLayer,可以调用静态AdornerLayer.GetAdornerLayer(visual)。此方法在VisualTree上移动,找到第一个AdornerDecorator(用于容纳AdornerLayer的容器),然后返回与UIElement关联的AdornerLayer。然后,您可以在该AdornerLayer内部访问与UIElement相关的Adorners。
以下是从StackPanel使用的AdornerLayer中删除与StackPanel相关的所有装饰器的代码:

var adornerLayer = AdornerLayer.GetAdornerLayer(yourStackPanel);
var adornersOfStackPanel = adornerLayer.GetAdorners(yourStackPanel);

foreach (var adorner in adornersOfStackPanel)
    adornerLayer.Remove(adorner);

10-07 12:55