我可能会误解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);