【发布时间】:2012-02-05 21:39:30
【问题描述】:
我可能误解了 WPF 中装饰层的概念,但我设法将 TextBlock 添加到 StackPanel 的装饰层。
我如何清除装饰层?那么StackPanel 在它的装饰层中不再有TextBlock 吗?
【问题讨论】:
我可能误解了 WPF 中装饰层的概念,但我设法将 TextBlock 添加到 StackPanel 的装饰层。
我如何清除装饰层?那么StackPanel 在它的装饰层中不再有TextBlock 吗?
【问题讨论】:
不,您必须添加或删除附加层
https://github.com/TheCamel/ArchX/blob/master/ArchX.Controls/Ruler/Ruler.cs
if (after)
layer.Add(GuideAdorner);
else
layer.Remove(GuideAdorner);
【讨论】:
老问题,但我也遇到了同样的问题:
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);
【讨论】: