具有多个<Run>间距的TextBlock

Max*_*lov 33 silverlight layout xaml textblock expression-blend

给定Windows Phone 7.1项目中的格式化文本块:

<StackPanel Orientation="Horizontal">
    <TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8">
            <Run Text="total length "/>
            <Run Text="{Binding TotalHours}" FontSize="48"/>
            <Run Text="h "/>
            <Run Text=":" FontSize="48"/>
            <Run Text="{Binding TotalMinutes}" FontSize="48"/>
            <Run Text="m "/>
    </TextBlock>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

它正在VS设计器中正确预览:

vs文本块

它已经在混合中看起来不像我想要的那样:

混合文本块

它看起来就像Blend(好工作Blend团队)在模拟器和真实设备中一样.

什么在8和45之前和之后添加了这些空格?

如何强制我的布局正确显示(如在VS设计器中)?

Jus*_* XL 56

如果你把所有的东西写Runs在同一条线上,空的空间就会消失.基本上,这里的新行是UI上的一个空白区域.

<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"><Run Text="total length "/><Run Text="{Binding TotalHours}" FontSize="48"/><Run Text="h "/><Run Text=":" FontSize="48"/><Run Text="{Binding TotalMinutes}" FontSize="48"/><Run Text="m "/></TextBlock>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 很好的回复.同样严肃地说,我们得到了那些作为TextBlock的子元素的运行,为什么对于TextBlock的显示是否重要,无论我们是否在它们之间放置空格.为什么换行+很多空格被解释为单个空格? (3认同)
  • @ValentinKuzub因为你可以在运行之间输入纯文本,它将被渲染.将连续的空格(制表符,输入)折叠到一个单独的空间是我们大多数人在HTML中已经熟悉的常见XML行为. (3认同)
  • 是的,好像这是HTML优于XML的一个很好的例子?允许在运行,运行和处理空格之间混合文本与特殊情况处理是一件好事并不是一件好事.你的交换问题和原因.问题是TextBlock的子XML元素的奇怪处理.它包括奇怪的空白处理和元素处理之间奇怪的原始文本. (2认同)
  • 不情愿+1 - 我总是讨厌这个.一个编辑试图将它们放在一行上,另一个试图将它们分开.一团糟 (2认同)

Jos*_*ing 9

为了建立Justin XL的答案,重要的是你不能在运行标签之间有空格,但标签中的空白本身并不重要......

因此,您可以创建将运行放在单独的行上,但不为结果添加空格:

<!-- Formatted to prevent adding spaces between runs -->
<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"
    ><Run Text="total length "
    /><Run Text="{Binding TotalHours}" FontSize="48"
    /><Run Text="h "
    /><Run Text=":" FontSize="48"
    /><Run Text="{Binding TotalMinutes}" FontSize="48"
    /><Run Text="m "
/></TextBlock>
Run Code Online (Sandbox Code Playgroud)