tutorial español ejemplos c# .net wpf xaml

c# - ejemplos - xaml pdf español



¿Cómo mantengo la relación de aspecto en contenido escalable y desplazable en WPF? (4)

En este caso, tu mejor UniformGrid es un UniformGrid . Esto solo es útil si quieres redes NxN.

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.

Comienzo con una definición de Grid como esta:

<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, si configura eso para estirar, puede llenar la ventana o cualquier contenedor en el que lo coloque. Las filas y la columna son uniformes pero la relación de aspecto 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 poner mi StackPanel y Grid (por separado) en un contenedor ScrollViewer apropiado, pero luego el contenido ya no se ajusta para ajustarse a la ventana. Va a tamaño completo, lo cual no es bueno.

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


Necesita configurar SizeToContent="WidthAndHeight" en la ventana para darle el comportamiento que SizeToContent="WidthAndHeight" .


poner 0.25 * en lugar de * para cada columna y ancho de fila