2011-05-15 14 views
5

Así que me doy cuenta de que me estoy aventurando fuera del uso previsto de un lienzo aquí y es probable que tenga que encontrar una solución más manual. Sin embargo, al no tener demasiada experiencia en WPF, esperaba que pudiera haber alguna solución que me permitiera seguir utilizando un control Canvas y las funciones que le ofrece de forma gratuita.Zoom en un lienzo sin modificar el tamaño de los controles secundarios específicos

El problema gira en torno a un lienzo que se usa para acercar y alejar una imagen y una cantidad de controles secundarios que pertenecen al lienzo. Estos controles secundarios deben colocarse en varias posiciones en la imagen y, como tal, el Lienzo funciona bien porque maneja todo el diseño/posicionamiento para mí al acercar o alejar.

Sin embargo, una desventaja es que el Lienzo escala estos controles secundarios mientras acerco la imagen, haciendo que sean demasiado grandes para poder usarlos en la práctica. Lo que busco es una solución que me permita acercarme a una imagen que pertenece a un lienzo sin aumentar también el tamaño de los controles secundarios, preferiblemente manejando el diseño para mí.

He intentado modificar el ancho y la altura de estos controles secundarios a medida que aumenta o disminuye el factor de zoom, pero hay un ligero retraso y todo se ve un poco "desigual".

Si se trata de hacer simplemente haré todo el zoom/panorámica/diseño yo mismo, pero pensé que primero me gustaría preguntar para asegurarme de que no me falta nada que me permita decirle al Canvas que no escala el tamaño de ciertos controles. Gracias por adelantado.

Respuesta

2

Puede vincular el RenderTransform de los niños al inverso de la transformación de Canvas, vea mi respuesta al this similar question on rotation.

+0

Muchas gracias por la respuesta aquí, parece justo lo que necesito. –

2

Esto es más un pensamiento que una respuesta, pero qué pasa si se establece una transformación en el elemento que no quería escalar que era lo contrario del propio lienzo. Entonces, por ejemplo, si el lienzo tenía una transformación de escala de 2.0, configure el elemento para que tenga una transformación de escala de 0.5. Probablemente pueda lograr esto al unir los valores de transformación utilizando un convertidor de valor.

Probablemente querrá asegurarse de que el elemento tenga un origen de transformación de representación de 0.5,0.5 para que se escale desde el centro.

+0

¡pensamiento agradable! Eso funcionaría bien, creo, lo intentaré muy rápido, pero no puedo imaginar que no funcione. Gracias de nuevo, de vuelta al código no-ui para mí ahora :) –

Cuestiones relacionadas