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

stu*_*ree 9 wpf

有些像这样的xaml:

<Grid Name="grid">
        <AdornerDecorator>
        <TextBox Height="23" HorizontalAlignment="Left" Name="textBox1" Width="120" />
        </AdornerDecorator>
</Grid>
Run Code Online (Sandbox Code Playgroud)

WPF Snoop实用程序指示textBox1是AdornerDecorator的子项(正如您所期望的那样),但AdornerDecorator创建的AdornerLayer也是子项.由于添加到AdornerLayer的自定义装饰器可以显示在文本框的"外部",因此AdornerLayer的绘图表面也必须伸展到外面(大概是整个窗口).

那么,AdornerDecorator的位置具有什么真正的意义(假设我们将UI元素绑定到我们放置在AdornerLayer中的自定义装饰器)?我知道AdornerLayer.GetAdorner(textBox1)将从textbox1获取可视树中的第一个装饰层,但是它在哪里(因为自定义ardorner被添加到图层而自定义ardoner知道它绑定了哪个元素)至)?

Jas*_*ank 26

简短的回答是,当您开始处理与其他控件重叠的控件(在z-index平面中)并且您关心特定的装饰层是否显示在重叠控件之上时,这很重要.例如,当您使用ErrorTemplate,其内容得到呈现在装饰器层,如果你不提供一个<AdornerDecorator>在你的应用程序(这意味着你只需要使用大多数窗口模板提供的一个),那么你就可以结束了发生.

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