2009-05-01 10 views
197

Was ich versuche, ist ein Fenster zu zeigen, das nicht ausdrücklich eine Höhe/Breite hat (beide Werte weggelassen oder auf gesetzt). Ich vermute, dass das Fenster seine Größe durch automatische Berechnung aller enthaltenen Benutzersteuergrößen herausfinden würde, aber das funktioniert nicht!Fensterhöhe = "Auto" funktioniert nicht wie erwartet

Stattdessen bekomme ich ein großes Fenster mit Actualwidth und Actualheight Werte beide auf 512 gesetzt

Fensterdeklaration (?!?!):

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

Zeigen dieses Fenster als Dialog über:

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 

Gibt es dafür eine Lösung? Ich möchte die Größe meines Fensters nicht explizit festlegen, da viele Steuerelemente im Formular basierend auf Konstruktorparametern minimiert werden. Das Suchen der tatsächlichen Größe des Formulars wäre schwierig (und hässlich).

+6

Sie auch das Fenster möchten zum Zentrum mit '.WindowStartupLocation' auf' „Mittenschirm“ ' –

Antwort

360

Legen Sie die Eigenschaft des Fensters SizeToContent to "WidthAndHeight" fest. Dies sollte helfen.

+75

Für faule Leute, die Paste' SizeToContent = „WidthAndHeight“ 'kopieren wollen;) –

+4

Vorsicht SizeToContent verwenden = "WidthAndHeight", Wenn die Größe des Inhalts des Fensters mehr als die Bildschirmgröße erhöht, kann Fenster vom Bildschirm überlaufen. –

3

Nun, Sie können die Fensterhöhe nicht auf automatisch einstellen, dazu können Sie einen kleinen Trick verwenden, den Hauptgittercontainer benennen, seine Höhe auf auto stellen und dann die Fensterhöhe an die Höhe des Hauptgitters binden

7

alte Frage, aber eine aktualisierte Antwort:

Als @ Muad'Dib in seiner Antwort vorgeschlagen:

Sie sollten SizeToContent="WidthAndHeight" gesetzt.

Wenn die Größe des Inhalts des Fensters größer als die Bildschirmgröße wird, kann das Fenster vom Bildschirm überlaufen. So müssen Sie berücksichtigen:

MaxWidth="600" 
MaxHeight="400" 
+0

Und was zu tun, wenn die 'MaxHeight =" 400 "' nicht respektiert wird? es wächst bis zum Bildschirmlimit? – andrepaulo

Verwandte Themen