2010-09-26 10 views
6

ho un blocco di testo che deveWPF TextBlock zoom e avvolgere

  1. mostra testo nella dimensione massima dei caratteri possibile all'interno dello spazio dato (meno caratteri grandi lettere e viceversa)
  2. avvolgere il testo all'interno lo spazio dato.

Ho provato ad utilizzare una casella di testo all'interno di un viewBox come qui di seguito, ma la disposizione del testo non funziona se non specificare la larghezza e l'altezza blocco di testo. Se devo specificare la larghezza e l'altezza alla stessa dimensione della viewbox, ovviamente lo zoom non avviene.

<Viewbox Stretch="Fill" Width="100" Height="100"> 
<TextBlock TextWrapping="Wrap"/> 
</Viewbox> 

C'è qualche altro modo per raggiungere questo? O dovrei pensare a scrivere un algoritmo per aumentare manualmente la dimensione del carattere in base alla quantità di testo? Qualsiasi aiuto è apprezzato.

+0

Si potrebbe fare manualmente l'interruzione di riga gestendo l'evento PreviewKeyDown o PreviewKeyUp e verificare se è stato raggiunto il limite di lunghezza del testo. Un altro modo per ottenere lo stesso risultato: creare un convertitore personalizzato e interrompere la linea. È possibile passare un parametro o utilizzare un campo per specificare MaxLength. – 0xbadf00d

risposta

0

Prova questo codice.

XAML:

<TextBlock x:Name="textBlock" 
      Text="Something text" 
      TextWrapping="Wrap" 
      FontSize="1" 
      Width="100" 
      Opacity="0" /> 

codice dietro:

while (textBlock.ActualHeight <= 100) 
{ 
    textBlock.FontSize += 0.1; 
    textBlock.UpdateLayout(); 
} 
textBlock.FontSize -= 0.1; 
textBlock.Opacity = 1;