ViewBox en WPF

Un elemento Viewbox es un contenedor que escala todos sus elementos secundarios de un modo similar a un control de zoom, solo puede tener un hijo y no una colección como teníamos en los anteriores contenedores, realmente se dice que es un contenedor de diseño.

Se encuentra en el assembly System.Windows.Controls, realmente solo escala para ajustar el contenido al tamaño, no hace un resize sino que realiza una transformación (que veremos mas adelante). Esto significa que todos los objetos tienen el mismo comportamiento que si ponemos en la propiedad  Stretch de un path o image el valor Uniform.

Yo lo utilizo para independizarme de la resolución del monitor, siempre diseño para la resolución estándar del proyecto pero meto un viewbox para que si se ejecuta en una resolución diferente sea mayor o menor  la aplicación se ajuste automáticamente, tiene muchas mas utilizadas un viewbx, debeis de experimentar con el.

 

<Window x:Class="WpfViewBox.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Viewbox Stretch="Fill">
        <Canvas Height="480" Width="720" Background="Gray" Margin="10">
            <Ellipse Height="300" Width="500" Fill="Yellow" 
                     Canvas.Top="100" Canvas.Left="100" />
        </Canvas>

    </Viewbox>
</Window>

Este codigo produce como resultado:

 

image

 

Fijaros en las propiedades Height y Width y como la elipse se adapta a un tamaño menor. Si damos a maximizar la ventana

 

image

 

Vemos que la elipse se hace mas achatada en mi equipo es porque tengo una pantalla paronímica y al valor que le he puesto en stretch, jugar con los valores de strecth y veréis las importantes diferencias que hay entre un valor y otro.

Los valores que puede tener la propiedad Stretch son

  • Fill
  • None
  • Uniform
  • Uniform
  • UniformToFill

A jugar….

Un comentario sobre “ViewBox en WPF”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *