如何在UWP应用程序中保留TextBlock的空格

时间:2015-09-17 03:12:39

标签: c# xaml windows-10 win-universal-app uwp

如果您只是将TextBlock中Text属性的值设置为“示例”(请注意此字符串的 end 有3个空格),TextBlock显示的内容在UI中只是“示例”。

在互联网上搜索解决方案后,我发现有一种方法可以解决这个问题:

<Border BorderThickness="1" 
        BorderBrush="#FFFF0202" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center">
    <TextBlock x:Name="t1">
        <Run Text="Example&#160;&#160;&#160;"/>
    </TextBlock>
</Border>

上面的代码显示了TextBlock的Inline属性的使用,并且Run的Text中的&#160;正确地显示了空白。

但是,在我的情况下,我需要在代码隐藏(或通过数据绑定)中设置TextBlock的Text属性,上面的技巧不起作用,它显示 {{1 UI中的

我尝试通过数据绑定设置Run的Text属性的值,我认为可以正确显示转义字符,但Run的Text属性不是依赖属性,所以我没有更好的方法来解决这个问题。

(但我认为使用TextBlock的填充属性也是一个技巧,它应该可以工作。但还有更好的方法吗?)

4 个答案:

答案 0 :(得分:6)

首先,Run.Text 支持数据绑定。

&#160;在数据绑定中没有正确打印的原因是因为它使用了XML转义字符。

尝试使用(char)160代替 -

public string TestString { get; set; } = "Example" + (char)160 + (char)160 + (char)160;

<TextBlock>
    <Run Text="{x:Bind TestString}" />
</TextBlock>

答案 1 :(得分:1)

您可以尝试将xml:space属性设置为保留在XAML中

<TextBox Name="t1"
         xml:space="preserve"
         Text="Example   " />

答案 2 :(得分:0)

我对UWP中的Listview.ItemTemplate有解决方案。

<ListBox.ItemTemplate>
     <DataTemplate>
          <StackPanel Orientation="Horizontal">
               <TextBlock xml:space="preserve"><Run Text="{Binding ID}"></Run><Run> </Run><Run Text="{Binding name}"></Run><Run> </Run><Run Text="{Binding ipAdress}"></Run></TextBlock>
           </StackPanel>
      </DataTemplate>
</ListBox.ItemTemplate>
  • 请注意,文本块具有xml:space =“ preserve”属性。
  • 使用运行元素<Run> </Run>设置空格。
  • 使用此解决方案,您必须确保在代码编辑器中的一行上定义了和元素,否则将接管其中的可用空间。

答案 3 :(得分:0)

zero width no-break space被视为非打印字符,而不是空格,因此在XAML中将&#xfeff;添加到值的末尾将保留尾随空格:

<Run Text="Example&#160;&#160;&#160;&#xfeff;"/>