2011-11-15 2 views
32

Dato un blocco di testo formattato in Windows Phone 7.1 progetto:TextBlock con più <Run> spaziatura

<StackPanel Orientation="Horizontal"> 
    <TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"> 
      <Run Text="total length "/> 
      <Run Text="{Binding TotalHours}" FontSize="48"/> 
      <Run Text="h "/> 
      <Run Text=":" FontSize="48"/> 
      <Run Text="{Binding TotalMinutes}" FontSize="48"/> 
      <Run Text="m "/> 
    </TextBlock> 
</StackPanel> 

E 'in anteprima correttamente in VS progettista:

vs text block

E' già non è la ricerca modo che voglio in Blend:

blend text block

Sembra proprio come in Blend (ottimo lavoro del team di Blend) in emulatore e un dispositivo reale.

Cosa aggiunge quegli spazi prima e dopo i grandi 8 e 45?

Come posso forzare il layout del mio layout in modo corretto (come in VS Designer)?

risposta

53

se scrivete tutti i vostri Runs nella stessa riga, lo spazio vuoto andrà via. Fondamentalmente una nuova riga qui è uno spazio vuoto sull'interfaccia utente.

<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"><Run Text="total length "/><Run Text="{Binding TotalHours}" FontSize="48"/><Run Text="h "/><Run Text=":" FontSize="48"/><Run Text="{Binding TotalMinutes}" FontSize="48"/><Run Text="m "/></TextBlock> 

enter image description here

+3

grande risposta. Come seriamente, abbiamo ottenuto quei Run che sono elementi secondari di TextBlock, perché diavolo importa per come viene visualizzato TextBlock indipendentemente dal fatto che mettiamo o meno spazi bianchi tra di loro. E perché newlines + molti spazi sono interpretati come uno spazio singolo ?? –

+3

@ValentinKuzub Perché è possibile immettere testo semplice tra le esecuzioni e verrà eseguito il rendering. La compressione di spazi bianchi consecutivi (schede, inserimenti) in un singolo spazio è un comportamento XML comune che molti di noi conoscono già in HTML. –

+2

sì, come se questo è un grande esempio di grandezza HTML su XML? permettendo di mescolare il testo tra Run, Run e trattare gli spazi bianchi con la gestione di casi speciali è chiaro non è una buona cosa e una scelta strana. Il tuo problema di scambio e la causa. Il problema è il trattamento strano degli elementi XML figlio di TextBlock. Comprende un trattamento strano per gli spazi bianchi e uno strano testo grezzo tra il trattamento degli elementi. –

9

Per costruire fuori la risposta di Justin XL, la parte importante è che non si può avere spazi bianchi tra i tag di esecuzione, ma gli spazi bianchi nei tag stessi does't importa ...

Così si può ottenere creativo di inserire corse su righe separate, ma non aggiungere spazi al risultato:

<!-- Formatted to prevent adding spaces between runs --> 
<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8" 
    ><Run Text="total length " 
    /><Run Text="{Binding TotalHours}" FontSize="48" 
    /><Run Text="h " 
    /><Run Text=":" FontSize="48" 
    /><Run Text="{Binding TotalMinutes}" FontSize="48" 
    /><Run Text="m " 
/></TextBlock> 
+0

perché non usare Spans invece di Runs? (o non sono supportati su Windows Phone?) –

+0

Penso che il problema qui abbia più a che fare con lo spazio bianco tra i tag trattati come uno spazio piuttosto che un problema con i tag stessi. Da quanto ho capito, uno Span viene utilizzato per aggiungere elementi non testuali a un blocco di testo, dove Run è solo per il testo, quindi dubito che l'utilizzo di Span al posto di una Run risolverà il problema con gli spazi aggiuntivi aggiunti. –

+0

E 'stato così, grazie! – serop