Altura da janela = "Auto" não está funcionando conforme o esperado

223

O que estou tentando fazer é mostrar uma janela que não tenha explicitamente uma altura / largura (ambos os valores omitidos ou definidos como Auto). Eu estava imaginando que a janela descobriria seu tamanho calculando automaticamente todos os tamanhos de controles de usuário contidos, mas isso não funciona!

Em vez disso, recebo uma grande janela com Actualwidthe os Actualheightvalores definidos como 512 (?!?!)

Declaração de janela:

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

Mostrando esta janela como um diálogo via:

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

Existe uma solução para isso? Não quero definir explicitamente o tamanho da minha janela porque muitos controles no formulário serão recolhidos com base nos parâmetros do construtor, e tentar encontrar o tamanho real do formulário seria complicado (e feio).

Entrodus
fonte
7
Você também pode querer centralizar a janela com o .WindowStartupLocationconjunto de"CenterScreen"
Anders Lindén

Respostas:

408

Defina a propriedade da janela SizeToContent="WidthAndHeight". Isso deve ajudar.

Muad'Dib
fonte
89
Para pessoas preguiçosas que querem copiar e colar SizeToContent="WidthAndHeight";)
Tono Nam
4
Cuidado ao usar SizeToContent = "WidthAndHeight", se o tamanho do conteúdo da janela aumentar mais que o tamanho da tela, a janela poderá transbordar da tela.
Kylo Ren 23/04
@KyloRen assim um MaxWidth ou MaxHeight deve ser ajustado para evitar o problema
Carlos Liu
@CarlosLiu há muito tempo, estou sem prática e não consigo me lembrar, mas sim logicamente parece certo. tente em uma demonstração :)
Kylo Ren
Isso é ótimo, mas ainda estou curioso por que Height="Auto"e Width="Auto"não realiza a mesma coisa? Suponho que o conteúdo da janela não seja considerado com essas configurações.
Mike Lowery
7

Pergunta antiga, mas uma resposta atualizada:

Como @ Muad'Dib sugeriu em sua resposta:

você deve definir SizeToContent="WidthAndHeight".

Se o tamanho do conteúdo da janela aumentar mais que o tamanho da tela, a janela poderá exceder a tela. Então, você deve considerar:

MaxWidth="600"
MaxHeight="400"
Vishal
fonte
E o que fazer quando MaxHeight="400"não for respeitado? cresce até o limite da tela?
andrepaulo 28/02
3

Bem, você não pode definir a altura da janela como automática, para fazer isso, use um pequeno truque, nomeie o contêiner principal da grade principal, defina sua altura como automática e vincule a altura da janela à altura da grade principal

Feelbad Soussi Wolfgun DZ
fonte
0

Definir tamanho na tela atual com janelas de eventos carregadas

Hooman
fonte