为什么TextBlock会修剪文本中的结尾空格?

时间:2013-01-15 12:21:25

标签: xaml windows-8 microsoft-metro .net-4.5

这是我的TextBlock s

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

这是输出(屏幕截图) enter image description here

为什么TextBlock修剪结尾空格?但是当我提供前导空格时,它工作正常。

5 个答案:

答案 0 :(得分:18)

看起来xml:space="preserve" 应该执行操作(请参阅Preserving Whitespace in XAML),但这似乎并不适用于Windows应用商店应用(它在WPF)。

如果您使用不间断空格字符&#160;,它确实有效

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

我想你可以尝试在Text属性上构建一个转换器来检查尾随空格并用非破坏空格替换 - 假设发生的截断并不太早发生。

答案 1 :(得分:9)

使用<Run />中的<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>

自动换行仍然有效

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

如果包装不是问题,我会很容易地使用Jim的解决方案(#160;)。

在您的脑海中,请考虑HTML如何处理和保留空间。这也是XAML处理和保留空间的方式。当然,您会认为在TextBlock中,它会更直接地处理,是吧?嗯,它就是这样。至少有一个解决方案。

答案 2 :(得分:3)

尝试使用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>

答案 3 :(得分:1)

我找到了不同的解决方案!当您设置\u+A0IsTextSelectionEnabled有效。

我不知道为什么会这样,而且这是一个完全的惊喜(我添加了该字段,因为我刚刚发现它同时也在处理我的'为什么我的文字会被Universal Apps修剪?'问题)。

同样U+205F(中等数学空间)也与IsTextSelectionEnabled一起使用。

答案 4 :(得分:0)

RichTextBlock似乎保留了前导和尾随空格(在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>

但除了您指定的那些之外,它似乎还在运行之间添加了额外的空间。