2011-06-03 58 views
2

我有两个TextBlocks,每个都有不同的字体大小,并且试图垂直对齐它们,以便它们的基线匹配。通过基线对齐TextBlocks

我知道如何通过在单个TextBlock中创建多个Run元素来完成此操作,但在这种情况下,我的TextBlocks不是直接相邻的,因此无法工作。这是我的布局的一个简单的例子:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="100"></ColumnDefinition> 
    <ColumnDefinition Width="200"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="100"></RowDefinition> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Column="0" 
      FontSize="20" 
      VerticalAlignment="Bottom">Small</TextBlock> 
    <TextBlock Grid.Column="1"     
      FontSize="50" 
      VerticalAlignment="Bottom">Large</TextBlock> 
</Grid> 

如果我能找到一种方法来计算代码的字体的基线,这将是足够好 - 我所能做的对齐方式代码,使用帆布或自定义面板 - 但我一直无法找到任何用于查找字体指标的WP7 API。

我发现了一个非常类似的问题here,但该解决方案涉及FormattedText类,不幸的是这在WP7上不可用。

如果可能的话,我真的很希望能够在不对任何边距/偏移进行硬编码的情况下执行此操作。

回答

3

虽然我与马特的答案基本一致,如果你真正需要解决的问题,而无需手动设置页边距,等等,那么你可以通过LineHeight设置为最高的线路,然后设置LineStackingStrategyBlockLineHeight对准他们“正常”。

+0

谢谢德里克。我刚刚测试过,似乎运作良好。 – Nick 2011-06-03 13:53:41

+0

你如何获得最高线? – tofutim 2011-06-10 20:49:25

+0

@tofutim我假设你知道自己哪条线是最高的。如果您使用的是其中一种内置样式,则可以使用静态资源来匹配字体大小。 – 2011-06-13 10:12:03

-1

因为您正在使用XAML对字体大小进行硬编码,所以硬编码页边距有什么不好以便创建您要查找的效果?

这也意味着您只需要进行一次计算,而不是每次页面布局时都强制应用程序执行此操作。

+0

我希望能够根据屏幕分辨率/方向更改字体大小。 – Nick 2011-06-03 11:28:13

+0

由于只有一个支持的分辨率和2个方向,所以只需要执行两次。 – 2011-06-03 12:18:02

+2

谢谢Matt,这可能是合理的。我问的原因是我有现有的布局代码可以扩展到其他平台上的任何分辨率(iOS/Android)。我希望避免对WP7未来支持的屏幕分辨率做出假设。 – Nick 2011-06-03 13:50:07