先看一个例子:
<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