Висота вікна = "Авто" працює не так, як очікувалося


223

Я намагаюся зробити це показати вікно, яке явно не має висоти / ширини (обидва значення опущені або встановлені Auto). Я здогадувався, що вікно дізнається його розмір за допомогою автоматичного обчислення всіх розмірів, що містяться у користувачів, але це насправді не працює!

Натомість я отримую велике вікно з Actualwidthі Actualheightзначенням встановлено 512 (?!?!)

Декларація вікна:

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

Показати це вікно у діалоговому вікні через:

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

Чи є для цього рішення? Я не хочу явно встановлювати розмір свого вікна, оскільки багато елементів керування у формі будуть згортатися на основі параметрів конструктора, а спроба знайти фактичний розмір форми була б хитрою (і потворною).


7
Ви також можете .WindowStartupLocationвідрегулювати вікно, встановлене на"CenterScreen"
Anders Lindén

Відповіді:


408

Встановіть властивість вікна SizeToContent="WidthAndHeight". Це має допомогти.


89
Для ледачих, які хочуть скопіювати пасту SizeToContent="WidthAndHeight";)
Tono Nam

4
Обережно використовувати SizeToContent = "WidthAndHeight", Якщо розмір вмісту вікна збільшується більше, ніж розмір екрана, вікно може переповнюватися з екрана.
Kylo Ren

@KyloRen, щоб уникнути проблеми слід встановити MaxWidth або MaxHeight
Карлос Лю

@CarlosLiu давно, я поза практикою і не можу згадати, але так логічно звучить правильно. спробуйте в демонстрації :)
Kylo Ren

Це чудово, але мені все одно цікаво, чому Height="Auto"і Width="Auto"не досягають того самого? Я здогадуюсь, оскільки вміст вікон не враховується з цими налаштуваннями.
Майк Лоурі

7

Старе запитання, але оновлена ​​відповідь:

Як @ Muad'Dib запропонував у своїй відповіді:

ви повинні встановити SizeToContent="WidthAndHeight".

Якщо розмір вмісту вікна збільшується більше, ніж розмір екрана, вікно може переповнюватися з екрана. Отже, ви повинні врахувати:

MaxWidth="600"
MaxHeight="400"

І що робити, коли MaxHeight="400"це не дотримується? вона зростає до обмеження екрана?
andrepaulo

3

Ну ви не можете встановити висоту вікна на автоматичну, для цього можна скористатися невеликою хитрістю, назвіть основний контейнер основної сітки, встановіть його висоту для автоматичного, а потім прив’яжіть висоту вікна до висоти основної сітки


0

Встановіть розмір у екрані, що лежить із завантаженими вікнами подій

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.