有些像这样的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被添加到图层而自定义ardoner知道它绑定了哪个元素)到)?
答案 0 :(得分:26)
简短的回答是,当您开始处理与其他控件重叠的控件(在z-index平面中)并且您关心特定的装饰图层是否显示在重叠控件之上时,这很重要。例如,当您使用ErrorTemplate时,其内容会在adorner图层中呈现,如果您未在应用中提供<AdornerDecorator>
(这意味着您只使用大多数Window模板提供的内容) ),那么你最终可能会发生this。
通过将<AdornerDecorator>
放在我们想要的位置,我们可以控制这种重叠的行为方式。