如何在 UWP 应用程序中保留 TextBlock 的空白
How to preserve white-spaces of TextBlock in UWP apps
如果您只是将 TextBlock 中的 Text 属性 的值设置为“Example ”(请注意 末尾有 3 个空格 这个字符串),TextBlock 在 UI 中显示的只是“Example”。
并且在网上搜索解决方案后,发现有一种方法可以解决这个问题:
<Border BorderThickness="1"
BorderBrush="#FFFF0202"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<TextBlock x:Name="t1">
<Run Text="Example   "/>
</TextBlock>
</Border>
上面的代码显示了使用 Inline 属性 的 TextBlock 和  
在 运行 的 Text 中正确显示了空白。
但是,在我的情况下,我需要在 Code-behind(或通过 DataBinding) 中设置 TextBlock 的文本 属性,上面的技巧不起作用它在 UI.
中显示 Example   
我尝试通过数据绑定设置运行's Text 属性的值,我认为这样可以正确显示转义字符,但是运行's Text 属性 不是依赖项 属性 所以我没有更好的方法来解决这个问题。
(不过我认为使用 TextBlock 的 padding 属性 也是一个技巧,它应该可以工作。但是还有更好的方法吗?)
您可以尝试将 xml:space
属性 设置为保留在您的 XAML
<TextBox Name="t1"
xml:space="preserve"
Text="Example " />
首先,Run.Text
支持数据绑定。
 
在数据绑定中不能正确打印的原因是因为它使用了 XML 转义字符。
尝试使用 (char)160
代替 -
public string TestString { get; set; } = "Example" + (char)160 + (char)160 + (char)160;
<TextBlock>
<Run Text="{x:Bind TestString}" />
</TextBlock>
我在 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"。
- space 由 运行 个元素设置
<Run> </Run>
。
- 使用此解决方案,您必须确保在代码编辑器的一行中定义 和 元素,否则其中包含的免费 space 将被接管。
zero width no-break space 被视为非打印字符而不是空格,因此将 
添加到 XAML 中的值的末尾将保留尾随空格:
<Run Text="Example   "/>
如果您只是将 TextBlock 中的 Text 属性 的值设置为“Example ”(请注意 末尾有 3 个空格 这个字符串),TextBlock 在 UI 中显示的只是“Example”。
并且在网上搜索解决方案后,发现有一种方法可以解决这个问题:
<Border BorderThickness="1"
BorderBrush="#FFFF0202"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<TextBlock x:Name="t1">
<Run Text="Example   "/>
</TextBlock>
</Border>
上面的代码显示了使用 Inline 属性 的 TextBlock 和  
在 运行 的 Text 中正确显示了空白。
但是,在我的情况下,我需要在 Code-behind(或通过 DataBinding) 中设置 TextBlock 的文本 属性,上面的技巧不起作用它在 UI.
中显示Example   
我尝试通过数据绑定设置运行's Text 属性的值,我认为这样可以正确显示转义字符,但是运行's Text 属性 不是依赖项 属性 所以我没有更好的方法来解决这个问题。
(不过我认为使用 TextBlock 的 padding 属性 也是一个技巧,它应该可以工作。但是还有更好的方法吗?)
您可以尝试将 xml:space
属性 设置为保留在您的 XAML
<TextBox Name="t1"
xml:space="preserve"
Text="Example " />
首先,Run.Text
支持数据绑定。
 
在数据绑定中不能正确打印的原因是因为它使用了 XML 转义字符。
尝试使用 (char)160
代替 -
public string TestString { get; set; } = "Example" + (char)160 + (char)160 + (char)160;
<TextBlock>
<Run Text="{x:Bind TestString}" />
</TextBlock>
我在 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"。
- space 由 运行 个元素设置
<Run> </Run>
。
- 使用此解决方案,您必须确保在代码编辑器的一行中定义 和 元素,否则其中包含的免费 space 将被接管。
zero width no-break space 被视为非打印字符而不是空格,因此将 
添加到 XAML 中的值的末尾将保留尾随空格:
<Run Text="Example   "/>