Hauteur de la fenêtre = «Auto» ne fonctionne pas comme prévu

223

Ce que j'essaie de faire, c'est d'afficher une fenêtre, qui n'a pas explicitement de hauteur / largeur (les deux valeurs sont omises ou définies sur Auto). Je devinais que la fenêtre découvrirait sa taille en calculant automatiquement toutes les tailles de contrôles utilisateur contenus, mais cela ne fonctionne pas vraiment!

Au lieu de cela, j'obtiens une grande fenêtre avec Actualwidthet les Actualheightvaleurs sont toutes deux définies sur 512 (?!?!)

Déclaration de fenêtre:

<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>

Affichage de cette fenêtre sous forme de dialogue via:

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

Y a-t-il une solution à cela? Je ne veux pas définir explicitement la taille de ma fenêtre car de nombreux contrôles du formulaire seront réduits en fonction des paramètres du constructeur, et essayer de trouver la taille réelle du formulaire serait délicat (et moche).

Entrodus
la source
7
Vous pouvez également vouloir centrer la fenêtre avec un .WindowStartupLocationréglage sur"CenterScreen"
Anders Lindén

Réponses:

408

Définissez la propriété de la fenêtre SizeToContent="WidthAndHeight". Cela devrait aider.

Muad'Dib
la source
89
Pour les paresseux qui veulent copier-coller SizeToContent="WidthAndHeight";)
Tono Nam
4
Attention à utiliser SizeToContent = "WidthAndHeight", si la taille du contenu de la fenêtre augmente plus que la taille de l'écran, la fenêtre peut déborder de l'écran.
Kylo Ren du
@KyloRen donc un MaxWidth ou MaxHeight devrait être réglé pour éviter le problème
Carlos Liu
@CarlosLiu depuis longtemps, je suis hors de pratique et je ne me souviens pas, mais oui, ça sonne logiquement bien. essayez dans une démo :)
Kylo Ren
C'est génial, mais je suis toujours curieux de savoir pourquoi Height="Auto"et Width="Auto"n'accomplit pas la même chose? Je suppose que le contenu de la fenêtre n'est pas pris en compte avec ces paramètres.
Mike Lowery
7

Ancienne question mais une réponse mise à jour:

Comme l'a suggéré @ Muad'Dib dans sa réponse:

vous devez définir SizeToContent="WidthAndHeight".

Si la taille du contenu de la fenêtre augmente plus que la taille de l'écran, la fenêtre peut déborder de l'écran. Donc, vous devez considérer:

MaxWidth="600"
MaxHeight="400"
Vishal
la source
Et que faire quand le MaxHeight="400"n'est pas respecté? ça pousse jusqu'à la limite d'écran?
andrepaulo
3

Eh bien, vous ne pouvez pas définir la hauteur de la fenêtre sur auto, pour ce faire, vous pouvez utiliser une petite astuce, nommer le conteneur de la grille principale principale, définir sa hauteur sur auto puis lier la hauteur de la fenêtre à la hauteur de la grille principale

Feelbad Soussi Wolfgun DZ
la source
0

Définir la taille dans l'écran actuel avec des fenêtres d'événements chargées

Hooman
la source