在子控件后面放置一个装饰层

Posted

技术标签:

【中文标题】在子控件后面放置一个装饰层【英文标题】:Put an adorner layer behind child controls 【发布时间】:2013-04-22 10:23:52 【问题描述】:

我有一个画布,我需要在其中绘制一个网格,但在子控件后面。我试图创建一个新的装饰器并将其添加到画布中,但是这个装饰器显示在子控件上。我怎样才能让这个装饰器在画布的孩子后面?我不想在画布的 OnRender 函数中绘制这个网格...

澄清:网格不是控件。它是画布上绘制的网格或网。它是为了使位置元素更容易而创建的。

【问题讨论】:

有什么原因不能将它添加到画布的父级(或者只是将画布嵌套在画布中)? 我考虑过创建一个带有网格的普通控件,并将其放置为具有最小 z-index 且与画布大小相同的画布的子项。但我想找到更好的方法 在不覆盖 OnRender 的情况下可能不是更好的方法。我可能只是嵌套两个画布并将装饰器应用于外部画布,简单的解决方案 - 好吧,你会得到一个 tiny 有点混乱的 XAML,但这是一个很小的代价 感谢您的建议,但我认为这行不通。因为我们会遇到同样的问题。问题是我不能覆盖 OnRender,因为当它被调用时,我没有所有初始化数据。所以我认为我需要创建一个带有网格的底层控件并将其放在其他人后面的画布上......悲伤 【参考方案1】:

一种方法是使用TileBrush 作为Canvas.Background 并将TileBrush 设置为适当的网格图案。

【讨论】:

感谢您的回答。我的解决方案是完全一样的。我发现的最简单的方法【参考方案2】:

Adorner 只能在顶部(它总是具有最高的 zindex)。您需要为您的潜在问题寻找另一种解决方案

【讨论】:

【参考方案3】:

使用Panel.ZIndex 属性设置元素在 z 平面上显示的顺序。

【讨论】:

您确定我可以将 zindex 与 Adorner 一起使用吗?它不是控件 不,普通的 ZIndex 在 Adorners 上不起作用(有办法做到这一点,但你必须通过反射)。

以上是关于在子控件后面放置一个装饰层的主要内容,如果未能解决你的问题,请参考以下文章

labview的3D图片上如何放置控件

WPF入门教程系列十——布局之Border与ViewBox

如何将 UIImageView 放置在子视图的特定区域中

装饰器函数运用实例1

WPF Adorner

Android编程:如何在子线程中更新TextView控件