我可能误解了WPF中adorner layers的概念,但我成功地将一个TextBlock
添加到了StackPanel
的adorner layer。
我该如何清除adorner layer?比如说,使StackPanel
不再具有TextBlock
在其adorner layer中?
虽然这个问题比较老,但我最近遇到了同样的问题:
AdornerLayers 可以由多个 UI 元素共享。要访问任何 UI 元素(更具体地说,是任何可见元素)的 AdornerLayer,您可以调用静态方法 AdornerLayer.GetAdornerLayer(visual)。此方法遍历 VisualTree,在第一个 AdornerDecorator 中找到 AdornerLayer 并返回与该 UIElement 相关联的 AdornerLayer。然后您可以在该 AdornerLayer 中访问与 UI 元素相关的 Adorners。
以下是从 StackPanel 使用的 AdornerLayer 中删除与其相关的所有 Adorners 的代码:
var adornerLayer = AdornerLayer.GetAdornerLayer(yourStackPanel);
var adornersOfStackPanel = adornerLayer.GetAdorners(yourStackPanel);
foreach (var adorner in adornersOfStackPanel)
adornerLayer.Remove(adorner);
https://github.com/TheCamel/ArchX/blob/master/ArchX.Controls/Ruler/Ruler.cs
if (after)
layer.Add(GuideAdorner);
else
layer.Remove(GuideAdorner);