Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does TextBlock trims ending spaces from the text?

Here are my TextBlocks:

<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>

And here is the output (screen shot): enter image description here

Why does TextBlock trim ending spaces? However, it works fine when there are leading spaces.

like image 537
Inder Kumar Rathore Avatar asked Jan 15 '13 12:01

Inder Kumar Rathore


3 Answers

It looks like xml:space="preserve" should do the trick (see Preserving Whitespace in XAML) but that doesn't seem to be working in a Windows Store app (it does in WPF).

If you use the non-breaking space character &#160; it does work

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

I suppose you could try building a converter on the Text property to check for trailing spaces and replace with non-breaking spaces - presuming the truncation that's happening doesn't occur too early.

like image 119
Jim O'Neil Avatar answered Nov 19 '22 17:11

Jim O'Neil


Solved with <Run /> in a <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>

And word wrapping still works

<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>

I would easily use Jim's solution (#160;) if wrapping was not an issue.

In your mind please think about how HTML handles and preserves spaces. This is also how XAML handles and preserves spaces. You would think, of course, that inside a TextBlock it would be more literally handled, huh? Well, it is what it is. At least there's a solution.

like image 27
Jerry Nixon Avatar answered Nov 19 '22 18:11

Jerry Nixon


Try use 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>
like image 4
Norbert Pisz Avatar answered Nov 19 '22 16:11

Norbert Pisz