按基线对齐TextBlocks

时间:2011-06-03 11:14:30

标签: windows-phone-7

我有两个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>

如果我能找到一种方法来计算代码中字体的基线,那就足够了 - 我可以使用Canvas或自定义面板在代码中进行对齐 - 但我找不到任何用于查找字体指标的WP7 API。

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

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

2 个答案:

答案 0 :(得分:3)

虽然我同意Matt的回答,但如果您确实需要在不手动设置边距等的情况下解决问题,那么您可以通过将LineHeight设置为最高线,然后设置{来“正确”对齐它们。 {1}}至LineStackingStrategy

答案 1 :(得分:-1)

因为你在XAML中对字体大小进行硬编码,硬编码边距以创建你想要的效果有什么不好?

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