【问题标题】:Possible to clear an adorner layer?可以清除装饰层吗?
【发布时间】:2012-02-05 21:39:30
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf adorner


    【解决方案1】:

    不,您必须添加或删除附加层

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-05-20
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多