去掉两个TextBlock控件之间空格的两个方法 (remove space between two textblocks)

先看一个例子:

    <TextBlock Canvas.Left="37.7953" Canvas.Top="95.5906">
        <TextBlock Text="lzd"></TextBlock>       
        <TextBlock Text="2013/09/09"></TextBlock>
    </TextBlock>

上面的例子中, 内部的两个TextBlock控件之间默认带有一个空格, 预览的效果如下图:

从MSDN XAML 概述 (WPF) 一文中可以发现如下描述:

WPF XAML 处理器和序列化程序将忽略或删除所有无意义的空白,并规范化任何有意义的空白。这与 XAML 规范的默认空白行为建议一致。通常,只有当您在 XAML 内容属性中指定字符串时,此行为的重要性才会体现出来。简言之,XAML 将空格、换行符和制表符转化为空格,如果它们出现在一个连续字符串的任一端,则保留一个空格。

那么,如果想去掉这个空格,  有什么方法呢?

方法1: 将两个TextBlock首尾相连, 去掉之间的回车换行即可解决。

代码如下: 

    <TextBlock Canvas.Left="37.7953" Canvas.Top="115.5906">
        <TextBlock Text="lzd"></TextBlock><TextBlock Text="2013/09/09"></TextBlock>
    </TextBlock>

预览的效果如下图:

现在, 把前后两张图放在一起, 比较一下就能看出这个空格的区别了.

方法2:如果觉得这样的解决方案不令人满意, 可以使用StackPanel来解决。

代码如下:

    <StackPanel Canvas.Left="37.7953" Canvas.Top="115.5906" Orientation="Horizontal"  >
        <TextBlock Text="Date:" ></TextBlock>
        <TextBlock Text="2013/09/09"></TextBlock>       
    </StackPanel>

或者

    <StackPanel Canvas.Left="37.7953" Canvas.Top="135.5906" Orientation="Horizontal"  >
        <TextBlock Text="Date:" ></TextBlock><TextBlock Text="2013/09/09"></TextBlock>
    </StackPanel>

上述两种写法的效果图如下:

 

可见, 在StackPanel中的TextBlock, 无论是否首尾相连, 都没有空格。

参考帖子:

1.Silverlight: Why is there space between these two elements?
http://stackoverflow.com/questions/4063992/silverlight-why-is-there-space-between-these-two-elements

2.spaces between runs in textblock
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/5f37aa29-3dc6-44db-9784-197f221f80f7

3.XAML 概述 (WPF)
http://msdn.microsoft.com/zh-cn/library/ms752059.aspx

作者:BobLiu
邮箱:lzd_ren@hotmail.com
出处:http://www.cnblogs.com/liuzhendong
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/liuzhendong/p/3085577.html