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


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.


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"

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


0

Definir tamanho na tela atual com janelas de eventos carregadas

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.