老问题,但我也遇到了同样的问题:
AdornerLayers由多个 UIElement 共享。要访问任何 ui 元素(更具体地说是任何 Visual)的 AdornerLayer,可以调用静态 AdornerLayer.GetAdornerLayer(visual)。此方法遍历 VisualTree,找到第一个 AdornerDecorator(一个容纳 AdornerLayer 的容器)并返回与 UIElement 关联的 AdornerLayer。然后,您可以在该 AdornerLayer 中访问与 UIElement 相关的 Adorner。
这是从 StackPanel 使用的 AdornerLayer 中删除与 StackPanel 相关的所有 Adorner 的代码:
var adornerLayer = AdornerLayer.GetAdornerLayer(yourStackPanel);
var adornersOfStackPanel = adornerLayer.GetAdorners(yourStackPanel);
foreach (var adorner in adornersOfStackPanel)
adornerLayer.Remove(adorner);