2013-04-11 18 views
7

C'è un modo per rilevare il numero di interruzioni di riga in un blocco di testo con TextWrapping="Wrap"?Rileva il numero di interruzioni di riga in TextBlock con wrap?

Sto considerando l'utilizzo di un carattere non monospaziato. Ho bisogno di questo perché sto creando una finestra MessageBox nuova e personalizzata, che ha un grande titolo testuale, animazioni, il logo della mia applicazione e il tema della mia applicazione.

È chiaro che ho bisogno di cambiare la dimensione della finestra in base al numero di LineBreak del messaggio corpo - simile a come si comporta la finestra MessageBox predefinita.

+0

Sto pensando di controllare l'altezza del blocco di testo, ma non sto creando un buon modo per farlo. Non penso che sia l'unica soluzione. Mi scusi per il mio inglese. – Guilherme

+1

Si può dare un'occhiata a questa [soluzione] (http://stackoverflow.com/questions/5720302/wpf-get-wrapped-text-out-of-a-textbox). Si tratta di TextBox, ma potrebbe comunque aiutarti. – Herdo

+0

è possibile utilizzare la proprietà ActualHeight – Avishek

risposta

5

È possibile visualizzare la quantità di txtName.ActualHeight che si ottiene senza avvolgere e quindi dividere ActualHeight (con wrap) per il valore ottenuto in precedenza. Dovresti ottenere il numero di linee.

Nota: non si otterrà l'altezza effettiva nel costruttore. Lo otterrai dopo che il blocco di testo è stato reso nel modulo.

esempio: (NoWrap)

txt.ActualHeight 
311.0 

(Wrap)

txt.ActualHeight 
1420.4400000000019 

Quindi,

int lineCount = (txt.ActualHeight/311.0) 

Speranza che aiuta :)

Update come per l'aggiornamento domanda:

Se è necessario impostare l'altezza messagebox secondo la vostra altezza TextBlock, si può semplicemente fare questo:

msgbox.Height = txt.ActualHeight + 10; 

// ho aggiunto 10 solo per l'aggiunta di un po 'di margine.

+0

Sì, proverò a farlo. Penso che sia il modo migliore, tuttavia se ho bisogno di cambiare la dimensione del carattere, ho bisogno di testare di nuovo e ricalcolare di nuovo, e io non voglio questo. – Guilherme

+0

@Guilherme: Controlla la mia risposta aggiornata, puoi evitare di ricalcolare. – Avishek

1

Windows può adattare le proprie dimensioni in base al contenuto. Vedi la proprietà .

+0

Sì, questo funziona con le dimensioni della finestra, ma in questo caso specifico, avrò bisogno di un modo "meno automatico", a causa di alcune animazioni e altri controlli. Comunque, molte grazie per l'aiuto. +1 – Guilherme