可以清除装饰层吗?

发布于 2024-12-26 05:19:32 字数 178 浏览 1 评论 0原文

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

我如何清除装饰层?例如,StackPanel 在其装饰层中不再有 TextBlock 吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阳光的暖冬 2025-01-02 05:19:32

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

AdornerLayers 由多个 UIElement 共享。要访问任何 ui 元素(更具体地说,任何 Visual)的 AdornerLayer,您可以调用 static AdornerLayer.GetAdornerLayer(visual)。此方法遍历 VisualTree,找到第一个 AdornerDecorator(保存 AdornerLayer 的容器)并返回与 UIElement 关联的 AdornerLayer。然后您可以访问 AdornerLayer 内与 UIElement 相关的 Adorners。

以下代码用于从 StackPanel 使用的 AdornerLayer 中删除与 StackPanel 相关的所有 Adorner:

var adornerLayer = AdornerLayer.GetAdornerLayer(yourStackPanel);
var adornersOfStackPanel = adornerLayer.GetAdorners(yourStackPanel);

foreach (var adorner in adornersOfStackPanel)
    adornerLayer.Remove(adorner);

Old question, but I just had the same problem:

AdornerLayers are shared by multiple UIElements. To access the AdornerLayer of any ui-element (of any Visual, to be more specific), you can call static AdornerLayer.GetAdornerLayer(visual). This method walks up the VisualTree, finds the first AdornerDecorator (a container to hold an AdornerLayer) and returns the AdornerLayer associated with the UIElement. Then you can access the Adorners related ot the UIElement, inside that AdornerLayer.

Here's the code to remove all Adorners, related to your StackPanel, from the AdornerLayer that is used by the StackPanel:

var adornerLayer = AdornerLayer.GetAdornerLayer(yourStackPanel);
var adornersOfStackPanel = adornerLayer.GetAdorners(yourStackPanel);

foreach (var adorner in adornersOfStackPanel)
    adornerLayer.Remove(adorner);
请远离我 2025-01-02 05:19:32

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

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

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

no, you must add or remove the addorned layer

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

if (after)
    layer.Add(GuideAdorner);
else
    layer.Remove(GuideAdorner);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文