2012-03-13 9 views
7

Con algunas xaml como este:AdornerDecorator: ¿qué importancia tienen dónde se colocan?

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

La utilidad WPF Snoop indica textBox1 es un hijo de AdornerDecorator (como era de esperar), sino también que el AdornerLayer que crea AdornerDecorator es también un niño. Como un adorno personalizado agregado a AdornerLayer se puede mostrar 'afuera' del cuadro de texto, la superficie de dibujo AdornerLayer debe extenderse también fuera (presumiblemente por toda la ventana).

Entonces, ¿qué importancia tiene la ubicación de AdornerDecorator (dado que vinculamos un elemento de UI al adorno personalizado, que colocamos en AdornerLayer)? Sé que AdornerLayer.GetAdorner (textBox1) obtendrá la primera capa de adorno en el árbol visual desde textbox1, pero qué importa dónde esté eso (a medida que el ardorner personalizado se agrega a la capa y el ardentor personalizado sabe a qué elemento está unido a)?

+0

Puede consultar mi problema para ver la importancia de la ubicación de AdornerDecorator. http://stackoverflow.com/questions/11477518/custom-validation-error-template-not-respecting-zindex/11523246#11523246 – Thelonias

Respuesta

20

La respuesta corta es que importa cuando empiezas a manejar controles que se superponen con otros controles (en el plano z-index) y te importa si una capa adorner particular se muestra encima de los controles superpuestos. Por ejemplo, cuando usa un ErrorTemplate, su contenido se procesa en una capa adorner y si no proporciona un <AdornerDecorator> en su aplicación (lo que significa que acaba de utilizar el proporcionado por la mayoría de las plantillas de Ventana), entonces puede terminar con this sucediendo.

Al colocar el <AdornerDecorator> donde queramos, podemos controlar cómo se comporta esta superposición.

Cuestiones relacionadas