可以清除装饰层吗?

时间:2012-01-09 10:26:25

标签: c# wpf adorner

我可能误解了WPF中adorner图层的概念,但我设法将TextBlock添加到StackPanel的adorner图层。

我如何清除装饰图层?那么StackPanel在其装饰层中不再有TextBlock吗?

2 个答案:

答案 0 :(得分:0)

否,您必须添加或删除附加图层

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

if (after)
    layer.Add(GuideAdorner);
else
    layer.Remove(GuideAdorner);

答案 1 :(得分:0)

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

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);