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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在UWP应用程序中保留TextBlock的空格相关的知识,希望对你有一定的参考价值。

如果您只是将TextBlock中Text属性的值设置为“Example”(请注意,此字符串末尾有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属性和运行文本中的&#160;正确显示了空白。

但是,在我的情况下,我需要在代码隐藏(或通过DataBinding)中设置TextBlock的Text属性,上面的技巧不起作用,它在UI中显示Example&#160;&#160;&#160;

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

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

答案

首先,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>
另一答案

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

<TextBox Name="t1"
         xml:space="preserve"
         Text="Example   " />
另一答案

我在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> </Run>设置。
  • 使用此解决方案,您必须确保在代码编辑器中一行定义元素和元素,否则将包含其中包含的可用空间。

以上是关于如何在UWP应用程序中保留TextBlock的空格的主要内容,如果未能解决你的问题,请参考以下文章

UWP - 在 TextBlock 中垂直居中文本

(多)在 UWP 或 WinUI3 中将列表绑定到 TextBlock

UWP仅在TextBlock文本溢出时显示Tooltip

无法将 TextBlock 前景置于黑色 UWP Color Foreground ListView

UWP仅在TextBlock文本溢出时显示Tooltip

如何更改颜色以调整 UWP 中的主题设置?