AdornerDecorator - 它们放在哪里有啥关系?

Posted

技术标签:

【中文标题】AdornerDecorator - 它们放在哪里有啥关系?【英文标题】:AdornerDecorator - what does it matter where they are placed?AdornerDecorator - 它们放在哪里有什么关系? 【发布时间】:2012-03-13 21:28:33 【问题描述】:

像这样的一些xaml:

<Grid Name="grid">
        <AdornerDecorator>
        <TextBox Height="23" HorizontalAlignment="Left" Name="textBox1" Width="120" />
        </AdornerDecorator>
</Grid>

WPF Snoop 实用程序指示 textBox1 是 AdornerDecorator 的子级(如您所料),但 AdornerDecorator 创建的 AdornerLayer 也是一个子级。由于添加到 AdornerLayer 的自定义装饰器可以显示在文本框的“外部”,因此 AdornerLayer 的绘图表面也必须延伸到外部(大概是整个窗口)。

那么,放置 AdornerDecorator 有什么实际意义(假设我们将 UI 元素绑定到自定义装饰器,我们将其放置在 AdornerLayer 中)?我知道 AdornerLayer.GetAdorner(textBox1) 将从 textbox1 获取可视化树中的第一个装饰层,但它在哪里有什么关系(因为自定义 ardorner 被添加到图层并且自定义 ardorner 知道它绑定了哪个元素到)?

【问题讨论】:

您可以查看我的问题以了解放置 AdornerDecorator 的意义。 ***.com/questions/11477518/… 【参考方案1】:

简短的回答是,当您开始处理与其他控件重叠的控件(在 z-index 平面中)并且您关心特定的装饰层是否显示在重叠控件的顶部时,这很重要。例如,当您使用ErrorTemplate 时,其内容会在装饰层中呈现,如果您在应用程序中没有提供&lt;AdornerDecorator&gt;(意味着您只使用大多数 Window 模板提供的那个),那么您最终可能会发生this。

通过将&lt;AdornerDecorator&gt; 放置在我们想要的位置,我们可以控制这种重叠的行为方式。

【讨论】:

以上是关于AdornerDecorator - 它们放在哪里有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

AdornerDecorator 和制表位问题

Xcode Bots 将它们的结果放在哪里,以便我可以解析它们?

我应该把我的 php 文件放在哪里让 Xampp 解析它们?

我应该将敏感文件放在哪里,以便 PHP 脚本可以读取它们?

WPF-验证-验证错误消息由于 AdornerDecorator 而落后于其他控件

我在哪里把自定义代码放在 Laravel