¿Quieres Adorners con clipping?

Pues sí, chavalote, cuando coges la capa de Adorners, seguramente estás cogiendo la capa POR DEFECTO, que suele ser única en una ventana y está por encima del resto de los elementos.

image

AdornerLayer, ahí lo ves.

Pues el temita es que si poner un adorner ahí, y lo más seguro es que así sea, se pondrá, como es de esperar, por encima de todos los elementos. ¡Claro, tío! si la capa de adorno está por encima, lo que le metas también! Pura lógica, hermoso.

image

¿Ves que la selección se superpone no solamente por la cuadrícula, sino por el resto de la ventana? ¡Pues esto es un poco heavy! Debería recortarse. ¿Estamos? Lengua fuera

Por muy lógico que sea que esto pase, la cosa no es evidente en un primer instante.

Ahora, sabiendo esto, ¿qué pasa si yo lo que quiero es que los adornitos esos tan guays que he creado (Adorners) se superpongan a una zona y no a todo?

Pues, ¿cómo te quedas si te digo que se pueden crear más AdornerLayers? Pues sí, baby, ¡para eso está el AdornerDecorator.

El AdornerDecorator estará en el nivel del árbol visual que le corresponda según lo hayamos declarado y tiene la particularidad de que aparte de albergar un contenido, nos generará una AdornerLayer para nuestro uso y disfrute.

O sea, tal que así:

<AdornerDecorator>
        <DockPanel>

            <Grid>
                <Rectangle Width="800" Height="600" VerticalAlignment="Top" HorizontalAlignment="Left"
                           Visibility="Visible" />
                <designerCanvas:Designer Background="Transparent">                   
                    <i:Interaction.Behaviors>
                        <rubberBand:RubberBandSelectionBehavior></rubberBand:RubberBandSelectionBehavior>
                    </i:Interaction.Behaviors>                    
                </designerCanvas:Designer>
                <Grid x:Name="GridOverlay" IsHitTestVisible="False" />
            </Grid>

        </DockPanel>
    </AdornerDecorator>

La cosa interesante de esto es que la capa generada estará limitada a la zona donde se declara. Es decir, que si ponemos un adorno en esa capa y un elemento de la misma se sale de los bordes de la capa, ¡tendrá clipping! O sea, que se recortará y desaparecerá en vez de dibujarse por encima de la ventana Sonrisa

image

Ahora el adorner se queda por detrás. Way cool, boy!

Esto es la mar de interesante para, por ejemplo, hacer rectángulos de selección o agarres (handlers) para redimensionar objetos.

Vamos, que es una chulada.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s