Altezza finestra = "Auto" non funziona come previsto


223

Quello che sto cercando di fare è mostrare una finestra, che non ha esplicitamente un'altezza / larghezza (entrambi i valori sono stati omessi o impostati su Auto). Immaginavo che la finestra avrebbe scoperto le sue dimensioni calcolando automaticamente tutte le dimensioni dei controlli utente contenuti, ma in realtà non funziona!

Invece ho una grande finestra con Actualwidthe Actualheightentrambi i valori impostato a 512 (?!?!)

Dichiarazione della finestra:

<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 questa finestra come finestra di dialogo tramite:

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

C'è una soluzione per questo? Non voglio impostare esplicitamente la dimensione della mia finestra perché molti controlli nel modulo verranno compressi in base ai parametri del costruttore e cercare di trovare la dimensione effettiva del modulo sarebbe complicato (e brutto).


7
Potresti anche voler centrare la finestra con .WindowStartupLocationimpostato su"CenterScreen"
Anders Lindén il

Risposte:


408

Imposta la proprietà della finestra SizeToContent="WidthAndHeight". Questo dovrebbe aiutare.


89
Per i più pigri che vogliono copiare incolla SizeToContent="WidthAndHeight";)
Tono Nam

4
Attento a utilizzare SizeToContent = "WidthAndHeight", se la dimensione del contenuto della finestra aumenta più della dimensione dello schermo, la finestra può traboccare dallo schermo.
Kylo Ren,

@KyloRen, pertanto è necessario impostare MaxWidth o MaxHeight per evitare il problema
Carlos Liu,

@CarlosLiu da molto tempo, sono fuori allenamento e non ricordo, ma sì, logicamente suona bene. prova in una demo :)
Kylo Ren

Questo è fantastico, ma sono ancora curioso di sapere perché Height="Auto"eWidth="Auto" non realizza la stessa cosa? Immagino perché il contenuto della finestra non è considerato con queste impostazioni.
Mike Lowery,

7

Vecchia domanda ma una risposta aggiornata:

Come ha suggerito @ Muad'Dib nella sua risposta:

dovresti impostare SizeToContent="WidthAndHeight".

Se la dimensione del contenuto della finestra aumenta più della dimensione dello schermo, la finestra può traboccare dallo schermo. Quindi, devi considerare:

MaxWidth="600"
MaxHeight="400"

E cosa fare quando MaxHeight="400"non viene rispettato? cresce fino al limite dello schermo?
andrepaulo,

3

Beh, non puoi impostare l'altezza della finestra su auto, per fare questo puoi usare un piccolo trucco, nominare il contenitore principale della griglia principale, impostare la sua altezza su auto quindi associare l'altezza della finestra all'altezza della griglia principale


0

Imposta le dimensioni nella schermata corrente con le finestre degli eventi caricate

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.