2008-11-14 29 views
32

Soy bastante nuevo en WPF y me he encontrado con un problema que parece un poco difícil de resolver. Básicamente, quiero una grilla de 4x4 que sea escalable pero que mantenga una relación de aspecto cuadrada (o cualquier otra arbitraria). Esto en realidad parece bastante complicado de hacer, lo que me sorprende porque me imagino que es un requisito bastante común.¿Cómo puedo mantener la relación de aspecto en contenido escalable y desplazable en WPF?

que empezar con una definición de cuadrícula como esto:

<Grid> 
    <Grid.RowDefinitions> 
    <Grid.RowDefinition Height="*"/> 
    <Grid.RowDefinition Height="*"/> 
    <Grid.RowDefinition Height="*"/> 
    <Grid.RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
    <Grid.ColumnDefinition Width="*"/> 
    <Grid.ColumnDefinition Width="*"/> 
    <Grid.ColumnDefinition Width="*"/> 
    <Grid.ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinition> 
    ... 
</Grid> 

Ahora bien, si se establece que para estirar, se puede llenar la ventana o cualquier recipiente que lo puso en las filas y columnas son uniformes, pero el aspecto. la proporción no es fija.

Luego intenté ponerlo en un StackPanel para usar el espacio disponible. No ayudó. Lo que me hizo llegar casi todo el camino cuando recordé Viewboxes.

<StackPanel Orientation="Horizontal"> 
    <Viewbox> 
    <Grid Height="1000" Width="1000"> <!-- this locks aspect ratio --> 
     <Grid.RowDefinitions> 
     <Grid.RowDefinition Height="*"/> 
     <Grid.RowDefinition Height="*"/> 
     <Grid.RowDefinition Height="*"/> 
     <Grid.RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
     <Grid.ColumnDefinition Width="*"/> 
     <Grid.ColumnDefinition Width="*"/> 
     <Grid.ColumnDefinition Width="*"/> 
     <Grid.ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinition> 
     ... 
    </Grid> 
    </viewbox> 
    <Label HorizontalAlignment="Stretch">Extra Space</Label> 
</StackPanel> 

Ahora mi contenido escala y mantiene la relación de aspecto. El problema es que si la ventana no es lo suficientemente ancha, parte de mi cuadrícula está fuera de la pantalla. Me gustaría poder desplazarme hacia él si ese fuera el caso. Del mismo modo, podría necesitar un tamaño mínimo, lo que también podría conducir al desplazamiento vertical.

Ahora he intentado colocar mi StackPanel y Grid (por separado) en un contenedor ScrollViewer apropiado, pero luego el contenido ya no se adapta a la ventana. Va a tamaño completo, lo cual no es bueno.

Entonces, ¿cómo hago para hacer esto? ¿Estoy ladrando el árbol equivocado? ¿Hay una manera mejor/más fácil de hacer esto?

Respuesta

-2

pusieron 0,25 * en lugar de * para cada columna y RowWidth

0

Will establecer SizeToContent = "WidthAndHeight" en la ventana de darle el comportamiento que está buscando?

5

En este caso, la mejor opción es una UniformGrid. Esto solo es útil si quieres redes NxN.

Cuestiones relacionadas