Высота окна = «Авто» не работает должным образом

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

Есть ли решение для этого? Я не хочу явно устанавливать размер моего окна, потому что многие элементы управления в форме будут свернуты на основе параметров конструктора, и попытка найти фактический размер формы будет сложной (и уродливой).

Entrodus
источник
7
Вы также можете .WindowStartupLocation"CenterScreen"
центрировать

Ответы:

408

Установите свойство окна SizeToContent="WidthAndHeight". Это должно помочь.

Muad'Dib
источник
89
Для ленивых людей, которые хотят скопировать пасту SizeToContent="WidthAndHeight";)
Тоно Нам
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

Ну, вы не можете установить высоту окна на авто, для этого вы можете использовать небольшую хитрость, назвать основной контейнер основной сетки, установить его высоту на авто, а затем привязать высоту окна к высоте основной сетки

Feelbad Soussi Wolfgun DZ
источник
0

Установить размер на текущем экране с загруженными окнами событий

Hooman
источник