2013-01-15 15 views
13

Ecco il mio TextBlock sPerché TextBlock taglia gli spazi finali dal testo?

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock Text="6 or more characters, at least one letter and a number, " FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
    <TextBlock Text="no symbols" FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
</StackPanel> 

Ed ecco l'output (screen shot) enter image description here

spazi Perché TextBlock finiture finali? Tuttavia funziona bene quando fornisco spazi guida.

risposta

16

Sembra xml:space="preserve"dovrebbe fare il trucco (vedi Preserving Whitespace in XAML), ma che non sembra funzionare in un'applicazione Windows Store (lo fa in WPF).

Se si utilizza il carattere di spazio non-breaking &#160; funziona

<TextBlock Text="6 or more characters, at least one letter and a number,&#160;&#160;&#160;&#160;&#160;&#160;&#160;" .... 

Immagino che si potrebbe provare a costruire un convertitore sulla proprietà Text per verificare la presenza di spazi finali e sostituirlo con spazi non-breaking - presumendo il troncamento che sta accadendo non si verifica troppo presto.

+0

lo spazio non-breaking fa il trucco ma la proprietà 'space' è facile da fare :( –

+0

Update da WinRT 8.1.' Xml: space' continua a non funzionare, e questa soluzione fa. –

+4

Questo (usando  ) NON sembra funzionare attualmente su un'app per Windows 10 Universal.Ho dovuto impostarlo semplicemente come contenuto tra i tag di apertura e di chiusura piuttosto che impostare la proprietà Text per ottenere il rendering corretto. Ho provato un certo numero di altre varianti senza alcun risultato (\ u0020, #nbsp, ecc.) – matthewsheets

3

uso Prova xml:space="preserve":

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock xml:space="preserve" Text="6 or more characters, at least one letter and a number, " FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
    <TextBlock xml:space="preserve" Text="no symbols" FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
</StackPanel> 
+0

+1 per attributo spazio. Ma questo non funziona nelle app store –

9

Risolto con <Run /> in un <TextBlock />..

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock FontFamily="Segoe UI" Foreground="#000000" FontSize="13"> 
     <Run Text="6 or more characters, at least one letter and a number, " /> 
     <Run Text="no symbols" /> 
    </TextBlock> 
</StackPanel> 

E a capo automatico funziona ancora

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock FontFamily="Segoe UI" Foreground="#000000" FontSize="13" 
     Width="200" TextWrapping="Wrap"> 
     <Run Text="6 or more characters, at least one letter and a number, " /> 
     <Run Text="no symbols" /> 
    </TextBlock> 
</StackPanel> 

avrei facilmente usare la soluzione di Jim (# 160;) se confezionamento non era un problema.

Nella tua mente, pensa a come HTML gestisce e conserva gli spazi. Questo è anche il modo in cui XAML gestisce e conserva gli spazi. Penseresti, naturalmente, che all'interno di un TextBlock sarebbe più letteralmente gestito, eh? Bene, è quello che è. Almeno c'è una soluzione.

+0

+1 Buona risposta :) –

+0

Jerry perché effettivamente stavo facendo questo è quando la mia app è in modalità normale il testo dovrebbe essere ** '6 o più caratteri, almeno una lettera e un numero, nessun simbolo' ** e in modalità di visualizzazione rapida dovrebbe essere ** '6 o più caratteri, almeno una lettera e un numero, senza simboli' **. L'ho fatto. Ma voglio che questi testi provengano dal file '.resw'. In altre parole, come impostare il testo in ** ' ' ** proprio come '' –

+0

Ho postato un ** [domanda relativa a questo anche qui] (http://stackoverflow.com/q/14343376/468724) ** –

0

RichTextBlock sembra preservare sia gli spazi iniziali e finali (in WP 8.1 WinRT):

<RichTextBlock> 
<RichTextBlock.Blocks> 
    <Paragraph > 
    <Paragraph.Inlines> 
    <Run Text="trailing " /><Run Text="bbb" /><Run Text=" leading" /> 
    </Paragraph.Inlines> 
    </Paragraph> 
</RichTextBlock.Blocks> 
</RichTextBlock> 

Ma sembra anche di aggiungere uno spazio aggiuntivo tra le piste in aggiunta al di quelli specificati.

1

Ho trovato una soluzione diversa! Il \u+A0 funziona anche quando si imposta lo IsTextSelectionEnabled.

Non so perché questo sarebbe, ed è stata una sorpresa totale (ho aggiunto il campo perché ho appena scoperto che lavorando anche sul mio 'Perché il testo ottiene rifilato a Universal Apps?' problema).

Anche U+205F (spazio matematico medio) funziona anche in combinazione con IsTextSelectionEnabled.

+0

A partire dal 2016-10-06, il trucco IsTextSelectionEnabled non funziona più, – rsclient

Problemi correlati