Fensterhöhe = "Auto" funktioniert nicht wie erwartet

223

Ich versuche, ein Fenster anzuzeigen, das nicht explizit eine Höhe / Breite hat (beide Werte wurden weggelassen oder auf gesetzt Auto). Ich vermutete, dass das Fenster seine Größe durch automatische Berechnung aller enthaltenen Benutzersteuerungsgrößen ermitteln würde, aber das funktioniert nicht wirklich!

Stattdessen bekomme ich ein großes Fenster mit Actualwidthund ActualheightWerte, die beide auf 512 gesetzt sind (?!?!)

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>

Anzeigen dieses Fensters 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 reduziert werden und der Versuch, die tatsächliche Größe des Formulars zu ermitteln, schwierig (und hässlich) wäre.

Entrodus
quelle
7
Vielleicht möchten Sie auch das Fenster mit der .WindowStartupLocationEinstellung"CenterScreen"
Anders Lindén

Antworten:

408

Legen Sie die Eigenschaft des Fensters fest SizeToContent="WidthAndHeight". Das sollte helfen.

Muad'Dib
quelle
89
Für faule Leute, die kopieren und einfügen wollen SizeToContent="WidthAndHeight";)
Tono Nam
4
Vorsicht bei der Verwendung von SizeToContent = "WidthAndHeight". Wenn die Größe des Fensterinhalts größer als die Bildschirmgröße ist, kann das Fenster vom Bildschirm überlaufen.
Kylo Ren
@KyloRen so sollte eine MaxWidth oder MaxHeight eingestellt werden, um das Problem zu vermeiden
Carlos Liu
@CarlosLiu lange Zeit, ich bin aus dem Training und kann mich nicht erinnern, aber ja klingt logisch richtig. versuchen Sie in einer Demo :)
Kylo Ren
Das ist großartig, aber ich bin immer noch neugierig, warum Height="Auto"und Width="Auto"nicht das Gleiche erreicht? Ich vermute, weil Fensterinhalte bei diesen Einstellungen nicht berücksichtigt werden.
Mike Lowery
7

Alte Frage, aber eine aktualisierte Antwort:

Wie @ Muad'Dib in seiner Antwort vorschlug:

du solltest einstellen SizeToContent="WidthAndHeight".

Wenn die Größe des Fensterinhalts größer als die Bildschirmgröße ist, kann das Fenster vom Bildschirm überlaufen. Sie müssen also Folgendes berücksichtigen:

MaxWidth="600"
MaxHeight="400"
Vishal
quelle
Und was tun, wenn das MaxHeight="400"nicht respektiert wird? es wächst bis zum Bildschirmlimit?
andrepaulo
3

Nun, Sie können die Fensterhöhe nicht auf Auto einstellen. Dazu können Sie einen kleinen Trick verwenden, den Hauptcontainer des Hauptgitters benennen, seine Höhe auf Auto einstellen und dann die Fensterhöhe an die Höhe des Hauptgitters binden

Feelbad Soussi Wolfgun DZ
quelle
0

Stellen Sie die Größe im aktuellen Bildschirm mit geladenen Ereignisfenstern ein

Hooman
quelle