2009-07-11 7 views

Respuesta

25

Viewbox es bastante útil si necesita que el contenido de su ventana se escale proporcionalmente al cambiar el tamaño de la ventana (por ejemplo, maximizarla). En esta página minimalista

<Window x:Class="WpfApplication1.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> 
     <StackPanel> 
      <TextBlock FontSize="14">Example</TextBlock> 
      <Border Background="Aqua" Width="100" Height="100"></Border>      
     </StackPanel> 
    </Viewbox> 
</Window> 

tiene un TextBlock y un borde de color apilados verticalmente; si inicia esta xaml, la ventana tendrá un tamaño de 300x300, la fuente del TextBlock tendrá un tamaño de 14 y el borde de color será de 100x100. Si reescalas la ventana, verás tanto el Bloque de Texto como la Escala del Borde en consecuencia (para que no sean más del tamaño que has especificado en el xaml), manteniendo proporciones relativas. Viewbox es realmente útil, en este sentido, si necesita una ventana cuyo diseño de componentes internos parezca siempre el mismo independientemente de la resolución final, se mostrará (lo que sí importa es la relación de aspecto, pensamiento). Obviamente, esto funciona con cualquier contenido que pongas dentro de Viewbox (tuvimos una aplicación con videos y vistas 3D, por ejemplo). Tenga en cuenta que en Visual Studio 2008 no podrá ver el contenido de Viewbox en el Diseñador.

Espero que esta ayuda.

+0

He estado recorriendo internet por la eternidad buscando esto <. < –

0

Do ¿Quiere decir que quiere que la ventana ocupe toda la pantalla? La forma más sencilla de hacerlo (sin causar más dolores de cabeza) es maximizar la ventana.

w.WindowState = WindowState.Maximized; 

EDIT:

Un diseño de la ventana escalable requiere para evitar usando el editor XAML en Visual Studio! De hecho, puedes hacerlo en el editor, pero es muy difícil.

mucho más fácil escribir el código XAML con la mano:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 

    <Label Grid.Column="0" Grid.Row="0">First Name</Label> 
    <TextBox Grid.Column="1" Grid.Row="0" Name="firstName">Fred</TextBox> 
    <Label Grid.Column="0" Grid.Row="1">First Name</Label> 
    <TextBox Grid.Column="1" Grid.Row="1" Name="lastName">Smith</TextBox> 
</Grid> 

este tamaño para ajustarse a la ventana, aunque pueda parecer extraño, ya que las filas y columnas de forma predeterminada conseguir la mitad del espacio de cada uno. Puede anular este por lo que tienen una altura determinada por su contenido en su lugar:

<RowDefinition Height="Auto"/> 

También puede ayudar a poner los márgenes de algunos controles, que el espacio fuera:

<TextBox Grid.Column="1" Grid.Row="1" Margin="6" Name="lastName">Smith</TextBox> 
+0

oh no me gustaría que este fuera mi problema ... quiero que el contenido se escale al tamaño de la ventana. –

+0

no estoy trabajando con el editor ... no me entendiste, quiero que el contenido crezca ... no se extienda ... –

+0

Vas a tener que editar tu pregunta, creo. ¿Quiere decir que realmente quiere que cada detalle se acerque, también el tamaño de fuente? –

2

Si desea escalar realmente todo, incluidos los tamaños de fuente, probablemente podría aplicar una transformación de escala a su contenido, y vincular sus valores X e Y al ancho y alto de la ventana. También necesitaría un convertidor de valor para convertirlos a la escala adecuada.

+0

¿cómo hago esto en mvvm? tengo un estilo para todos mis vms ... quiero hacer la escala ... –

1

Si desea escalar todo al tamaño de la ventana simplemente coloque todo dentro de un control Viewbox.

Cuestiones relacionadas