AdornerDecorator - 放置它们的重要性是什么?

时间:2012-03-13 21:28:33

标签: wpf

有些像这样的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知道它绑定了哪个元素)到)?

1 个答案:

答案 0 :(得分:26)

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

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