如果您只是将TextBlock中Text属性的值设置为“示例”(请注意此字符串的 end 有3个空格),TextBlock显示的内容在UI中只是“示例”。
在互联网上搜索解决方案后,我发现有一种方法可以解决这个问题:
<Border BorderThickness="1"
BorderBrush="#FFFF0202"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<TextBlock x:Name="t1">
<Run Text="Example   "/>
</TextBlock>
</Border>
上面的代码显示了TextBlock的Inline属性的使用,并且Run的Text中的 
正确地显示了空白。
但是,在我的情况下,我需要在代码隐藏(或通过数据绑定)中设置TextBlock的Text属性,上面的技巧不起作用,它显示 {{1 UI中的。
我尝试通过数据绑定设置Run的Text属性的值,我认为可以正确显示转义字符,但Run的Text属性不是依赖属性,所以我没有更好的方法来解决这个问题。
(但我认为使用TextBlock的填充属性也是一个技巧,它应该可以工作。但还有更好的方法吗?)
答案 0 :(得分:6)
首先,Run.Text
支持数据绑定。
 
在数据绑定中没有正确打印的原因是因为它使用了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>
<Run> </Run>
设置空格。答案 3 :(得分:0)
zero width no-break space被视为非打印字符,而不是空格,因此在XAML中将
添加到值的末尾将保留尾随空格:
<Run Text="Example   "/>