2010-01-27 18 views
10

Ho una finestra nella mia applicazione WPF che viene visualizzata in alcune occasioni. Quando viene mostrato, viene sfumato con un'annimazione e, una volta chiuso, viene sfumato. Niente di speciale, solo uno storyboard che modifica l'opacità. In realtà la finestra non è mai veramente chiusa, l'opacità è appena sfumata a 0 dove rimane fino alla sua visualizzazione.Determinare la dimensione della finestra WPF SizeToContent prima del rendering

Questa finestra è una finestra informativa e non sempre mostra lo stesso contenuto. È dimensionato in base al contenuto (larghezza e altezza) e funziona bene a tale riguardo. L'utente sceglie l'area di base dello schermo per visualizzarla (TopLeft, TopRight, Center, BottomLeft, BottomRight).

Prima che la finestra venga sbiadita, il contenuto viene aggiornato. Poiché la finestra è ridimensionata al contenuto, aumenta o diminuisce di dimensione. La larghezza e l'altezza possono cambiare.

Quando si posiziona la finestra, diciamo, nell'angolo in basso a destra, prendo semplicemente l'area di lavoro dello schermo (larghezza e altezza) e quindi meno la larghezza/altezza della finestra per ottenere la posizione superiore e sinistra che bisogno.

La logica funziona, ma il problema che sto avendo è l'altezza e la larghezza della finestra non restituisce la dimensione che è dopo che il contenuto è stato aggiornato, ma sta restituendo la dimensione era l'ultima volta che è stato visualizzato. Presumo questo perché non è stato ancora reso con il nuovo contenuto.

Questo mi provoca dolore se la finestra è più grande di quanto non fosse l'ultima volta che ovviamente si estende dallo schermo.

ho provato posizionare la finestra in caso OnContentRendered, ma questo solo incendi una volta quando viene creata la finestra, non dopo che il contenuto è stato aggiornato, quando l'opacità è impostata su 0.

Qualcuno ha qualche idea come posso ottenere un'accurata larghezza e altezza di questa finestra prima che si dissolva?

Qualsiasi aiuto sarebbe apprezzato !!

risposta

5

Ho trovato la risposta alla mia domanda. Dopo aver aggiornato il contenuto, una semplice chiamata al metodo UpdateLayout() della finestra forza un aggiornamento. Le chiamate alla larghezza e all'altezza restituiscono valori precisi.

+1

UpdateLayout() non funziona sempre. Voglio dire che non puoi sempre ottenere ActualHeight o ActualWidth subito dopo UpadteLayout() chiama – MikroDel

+2

Se hai risolto il tuo problema, puoi contrassegnare la risposta come soluzione. –

Problemi correlati