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

Ind*_*ore 15 xaml microsoft-metro windows-8 .net-4.5

这是我TextBlock

<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>
Run Code Online (Sandbox Code Playgroud)

这是输出(屏幕截图) 在此输入图像描述

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

Jim*_*eil 19

看起来xml:space="preserve" 应该做的伎俩(请参阅在XAML中保留空白),但这似乎不适用于Windows应用商店应用程序(它在WPF中).

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

 <TextBlock Text="6 or more characters, at least one letter and a number,&#160;&#160;&#160;&#160;&#160;&#160;&#160;"  ....
Run Code Online (Sandbox Code Playgroud)

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

  • 这个(使用&#160;)目前似乎不适用于Windows 10 Universal应用程序.我必须将它简单地设置为开始和结束标记之间的内容,而不是设置Text属性以使其正确呈现.尝试了许多其他变种无济于事(\ u0020,#nbsp等) (4认同)

Jer*_*xon 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>
Run Code Online (Sandbox Code Playgroud)

自动换行仍然有效

<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>
Run Code Online (Sandbox Code Playgroud)

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

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