Altura de ventana = "Auto" no funciona como se esperaba

223

Lo que intento hacer es mostrar una ventana que no tenga explícitamente una altura / anchura (ambos valores se omiten o se establecen en Auto). Supuse que la ventana descubriría su tamaño calculando automáticamente todos los tamaños de controles de usuario contenidos, ¡pero esto en realidad no funciona!

En vez consigo una gran ventana con Actualwidthy Actualheightvalores, tanto del conjunto a 512 (?!?!)

Declaración de ventana:

<Window x:Class="Window3"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window3" 
  Height="Auto">
<StackPanel>
    <Label>Window</Label>
</StackPanel>
</Window>

Mostrando esta ventana como un diálogo a través de:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
    Dim dlg As New Window3
    dlg.ShowDialog()
End Sub

¿Existe alguna solucion para esto? No quiero establecer explícitamente el tamaño de mi ventana porque muchos controles en el formulario se contraerán según los parámetros del constructor, y tratar de encontrar el tamaño real del formulario sería complicado (y feo).

Entrodus
fuente
77
Es posible que también desee centrar la ventana con el .WindowStartupLocationajuste a"CenterScreen"
Anders Lindén

Respuestas:

408

Establecer la propiedad de la ventana SizeToContent="WidthAndHeight". Esto debería ayudar.

Muad'Dib
fuente
89
Para gente perezosa que quiere copiar y pegar SizeToContent="WidthAndHeight";)
Tono Nam
44
Con cuidado de usar SizeToContent = "WidthAndHeight", si el tamaño del contenido de la ventana aumenta más que el tamaño de la pantalla, la ventana puede desbordarse de la pantalla.
Kylo Ren el
@KyloRen, por lo que se debe establecer un MaxWidth o MaxHeight para evitar el problema
Carlos Liu
@CarlosLiu mucho tiempo, estoy fuera de práctica y no puedo recordar, pero sí, lógicamente, suena bien. probar en una demostración :)
Kylo Ren
Esto es genial, pero todavía tengo curiosidad por qué Height="Auto"y Width="Auto"no logra lo mismo. Supongo que el contenido de la ventana no se considera con esta configuración.
Mike Lowery
7

Antigua pregunta pero una respuesta actualizada:

Como @ Muad'Dib sugirió en su respuesta:

deberías configurar SizeToContent="WidthAndHeight".

Si el tamaño del contenido de la ventana aumenta más que el tamaño de la pantalla, la ventana puede desbordarse de la pantalla. Entonces, debes considerar:

MaxWidth="600"
MaxHeight="400"
Vishal
fuente
¿Y qué hacer cuando MaxHeight="400"no se respeta? Crece hasta el límite de la pantalla?
andrepaulo
3

Bueno, no puede establecer la altura de la ventana en automático, para hacer esto puede usar un pequeño truco, nombrar el contenedor de la cuadrícula principal principal, establecer su altura en automático y luego vincular la altura de la ventana a la altura de la cuadrícula principal

Feelbad Soussi Wolfgun DZ
fuente
0

Establecer el tamaño en la pantalla actual con ventanas de eventos cargadas

Hooman
fuente