Wysokość okna = „Auto” nie działa zgodnie z oczekiwaniami

223

To, co próbuję zrobić, to pokazać okno, które nie ma jawnie wysokości / szerokości (obie wartości zostały pominięte lub ustawione na Auto). Zgadywałem, że okno dowie się o swoim rozmiarze poprzez automatyczne obliczenie wszystkich zawartych rozmiarów kontrolek użytkownika, ale tak naprawdę to nie działa!

Zamiast tego mam duże okno z Actualwidthi Actualheightwartości ustawione na 512 (?!?!)

Deklaracja okna:

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

Pokazywanie tego okna jako okna dialogowego poprzez:

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

Czy jest na to rozwiązanie? Nie chcę jawnie ustawiać rozmiaru mojego okna, ponieważ wiele kontrolek w formularzu zostanie zwiniętych w oparciu o parametry konstruktora, a próba znalezienia rzeczywistego rozmiaru formularza byłaby trudna (i brzydka).

Entrodus
źródło
7
Możesz także wyśrodkować okno z .WindowStartupLocationustawionym na"CenterScreen"
Anders Lindén,

Odpowiedzi:

408

Ustaw właściwość okna SizeToContent="WidthAndHeight". To powinno pomóc.

Muad'Dib
źródło
89
Dla leniwych, którzy chcą skopiować wklej SizeToContent="WidthAndHeight";)
Tono Nam
4
Ostrożnie używaj SizeToContent = "WidthAndHeight", jeśli rozmiar zawartości okna wzrośnie bardziej niż rozmiar ekranu, okno może przepełnić ekran.
Kylo Ren
@KyloRen, więc należy ustawić MaxWidth lub MaxHeight, aby uniknąć problemu
Carlos Liu
@CarlosLiu długo, jestem poza praktyką i nie pamiętam, ale tak logicznie brzmi dobrze. spróbuj w wersji demo :)
Kylo Ren
To świetnie, ale wciąż jestem ciekawy, dlaczego Height="Auto"i Width="Auto"nie osiągam tego samego? Zgaduję, ponieważ zawartość okna nie jest uwzględniana przy tych ustawieniach.
Mike Lowery
7

Stare pytanie, ale zaktualizowana odpowiedź:

Jak sugerował @ Muad'Dib w swojej odpowiedzi:

powinieneś ustawić SizeToContent="WidthAndHeight".

Jeśli rozmiar zawartości okna wzrośnie bardziej niż rozmiar ekranu, okno może przepełnić ekran. Musisz więc rozważyć:

MaxWidth="600"
MaxHeight="400"
Vishal
źródło
A co zrobić, gdy MaxHeight="400"nie jest przestrzegane? rośnie aż do limitu ekranu?
andrepaulo
3

Cóż, nie możesz ustawić wysokości okna na auto, aby to zrobić, możesz użyć małej sztuczki, nazwać główny główny kontener siatki, ustawić jego wysokość na auto, a następnie powiązać wysokość okna z wysokością głównej siatki

Feelbad Soussi Wolfgun DZ
źródło
0

Ustaw rozmiar na ekranie bieżącym z załadowanymi oknami zdarzeń

Hooman
źródło