8

I might be misunderstanding the concept of adorner layers in WPF but I've managed to add a TextBlock to a StackPanel's adorner layer.

How would I clear an adorner layer? So the StackPanel no longer has a TextBlock in it's adorner layer for example?

4

2 回答 2

1

老问题,但我也遇到了同样的问题:

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);
于 2021-02-15T00:52:03.360 回答
-1

不,您必须添加或删除添加的图层

https://github.com/TheCamel/ArchX/blob/master/ArchX.Controls/Ruler/Ruler.cs

if (after)
    layer.Add(GuideAdorner);
else
    layer.Remove(GuideAdorner);
于 2019-06-06T14:59:32.447 回答