2008-10-01 11 views
28

¿Cómo se pueden colocar elementos relativamente en WPF? El modelo estándar es utilizar gestores de disposición para todo, pero ¿qué sucede si desea colocar elementos (en un lienzo, por ejemplo) simplemente en función de la posición de otros elementos?¿Cómo se hace el posicionamiento relativo en WPF?

Por ejemplo, es posible que desee un elemento (por ejemplo un botón) que se adjunta al lado del otro (tal vez un panel) independientemente de la posición o el diseño de ese panel. Cualquiera que haya trabajado con herramientas de ingeniería (SolidWorks, AutoCad, etc.) está familiarizado con este tipo de posicionamiento relativo.

Obligar a todo en los administradores de diseño (los diferentes paneles WPF) no tiene mucho sentido para ciertos escenarios, donde no le importa que algún contenedor padre mantenga los elementos y no quiere que los otros niños se vean afectados un cambio en el diseño/apariencia de cada uno. ¿WPF es compatible con este modelo de posicionamiento relativo de alguna manera?

+0

No estoy seguro de entender completamente la pregunta. ¿Puede dar un ejemplo de un diseño de pantalla que no cree que se pueda lograr con el modelo de WPF? –

+0

Estoy de acuerdo, la pregunta es confusa ... parece que un simple StackPanel haría el truco. – cplotts

+2

No creo que sea confuso, y un StackPanel solo manejaría los casos más simples. Lo que él quiere es el equivalente a RelativeLayout en Android. – user316117

Respuesta

10

Buena pregunta. Hasta donde yo sé, necesitamos tener un panel personalizado diferente para obtener esta función. Como WPF se basa en la Jerarquía visual, no hay forma de tener este tipo de estructura plana para los elementos de la plataforma.

pero aquí es un truco para hacer esto. Coloque sus elementos en la misma posición y proporcione desplazamiento relativo utilizando RenderTransform.TranslateTransform. De esta forma, las X e Y de tu TranslateTransfrom siempre estarán relacionadas con el otro elemento.

+0

Gracias, gracias por esto. Trabajó un encanto. –

+0

¿Se puede publicar algún código? – user844541

+0

_ "WPF se basa en la Jerarquía Visual, no hay forma" - esto ha sido falso desde las primeras versiones de WPF. Ver 'Cuadrícula' para referencia. – Gusdor

13

En lugar de poner (como en el ejemplo) un botón directamente sobre el lienzo, se puede poner un StackPanel en el lienzo, alineados horizontalmente, y poner los dos botones en ese país.

así:

<Canvas> 
    <StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal"> 
    <Button>Button 1</Button><Button>Button 2</Button> 
    </StackPanel> 
</Canvas> 

alt text

Creo que es bastante flexible cuando se utiliza más de 1 diseño en una forma, y ​​se pueden crear casi cualquier configuración que se desee.

+0

Combinar esta sugerencia con la de Jobi Joy sería una solución, supongo: Pondría un Stackpanel dentro de un lienzo y usar TranslateTransform para ajustar la distancia entre los elementos. – ArthurT

Cuestiones relacionadas