【问题标题】:TextBlock with multiple <Run> spacing具有多个 <Run> 间距的 TextBlock
【发布时间】:2011-12-29 03:21:01
【问题描述】:

给定 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>

在 VS 设计器中正确预览:

在 Blend 中看起来已经不是我想要的方式了:

它看起来就像在模拟器和真实设备中的 Blend(Blend 团队干得好)。

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

如何强制我的布局看起来正确(如在 VS 设计器中)?

【问题讨论】:

    标签: silverlight xaml layout expression-blend textblock


    【解决方案1】:

    如果您将所有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>
    

    【讨论】:

    • 很好的回复。严肃地说,我们得到了那些作为 TextBlock 子元素的 Run,为什么无论我们是否在它们之间放置空格,TextBlock 如何显示都很重要。为什么换行符+很多空格被解释为单个空格??
    • @ValentinKuzub 因为你可以在运行之间输入纯文本,它将被渲染。将连续的空格(制表符、回车)折叠成一个空格是我们大多数人在 HTML 中已经熟悉的常见 XML 行为。
    • 是的,好像这是 HTML 优于 XML 的一个很好的例子?允许在 Runs、Runs 之间混合文本并使用特殊情况处理处理空格显然不是一件好事,也是一个奇怪的选择。您的交换问题和原因。问题是对 TextBlock 的子 XML 元素的奇怪处理。它包括奇怪的空白处理和元素之间的奇怪原始文本处理。
    • 勉强 +1 - 我一直讨厌这个。一位编辑试图将它们放在一行,另一位试图将它们分开。这么乱
    • 效果很好!很棒的提示!就我而言,我的第一个 Run 标记绑定值可能是空白的,没有空格,但无论如何,字符串开头总是有一个空格。在 XAML 中的同一行上运行标记可解决此问题。
    【解决方案2】:

    要构建贾斯汀 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>
    

    【讨论】:

    • 那为什么不使用 Spans 而不是 Runs 呢? (或者 Windows Phone 不支持它们?)
    • 我认为这里的问题更多地与标签之间的空白被视为空格有关,而不是标签本身的问题。据我了解,Span 用于将非文本元素添加到文本块,其中 Run 仅用于文本,所以我怀疑使用 Span 代替 Run 会解决添加额外空格的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多