在wpf中设置格式化文本中的上标和下标

时间:2010-01-19 17:37:42

标签: wpf wpf-controls subscript superscript formatted-text

如何在WPF中的FormattedText中将一些文本设置为下标/上标?

8 个答案:

答案 0 :(得分:44)

您使用Typography.Variants

<TextBlock>
    <Run>Normal Text</Run>
    <Run Typography.Variants="Superscript">Superscript Text</Run>
    <Run Typography.Variants="Subscript">Subscript Text</Run>
</TextBlock>

答案 1 :(得分:12)

您可以使用类似<TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>的内容。

但是,据我所知,你必须自己减少字体大小。

答案 2 :(得分:10)

我使用了布局转换,因为Typography.Variants通常不起作用:

<TextBlock Text="MyAmazingProduct"/>
 <TextBlock Text="TM">
  <TextBlock.LayoutTransform>
   <!-- Typography.Variants="Superscript" didn't work -->
   <TransformGroup>
    <ScaleTransform ScaleX=".75" ScaleY=".75"/>
    <TranslateTransform Y="-5"/>
   </TransformGroup>
  </TextBlock.LayoutTransform>
 </TextBlock>
<TextBlock Text="{Binding Path=Version, StringFormat={} v{0}}"/>

使用LayoutTransform的优点是它对fontsize不敏感。如果之后更改了fontsize,则此上标适用于显式FontSize设置中断的位置。

答案 3 :(得分:9)

值得注意的是,对于某些字符(m 2 ,m 3 等),不需要上标,但unicode字符可以是用过的。例如:

<Run Text=" m&#x00B3;" />

这将显示m 3

答案 4 :(得分:3)

我不知道您是否需要使用FormattedText 专门,或者您的意思是Inline的派生,但是以下内容适用于Inlines,即使Typography.Variants =“Superscript”失败也是如此工作。

TextRange selection = new TextRange(document.ContentStart, document.ContentEnd);
selection.ApplyPropertyValue(Inline.BaselineAlignmentProperty, BaselineAlignment.Superscript);

希望它有所帮助!

答案 5 :(得分:3)

Typography.Variants仅适用于开放式字体。如果你不喜欢你的上标/下标超出实际文本的高度,那么你可以使用如下内容:

<StackPanel Orientation="Horizontal">
    <TextBlock FontSize="10" Margin="0,5,0,0">1</TextBlock>
    <TextBlock FontSize="30">H</TextBlock>
    <TextBlock FontSize="10" Margin="0,20,0,0">2</TextBlock>
</StackPanel>

答案 6 :(得分:1)

使用以下代码设置上标可以正常工作:

<TextBlock Text="(cm"  />
<TextBlock ><Span BaselineAlignment="Top" FontSize="8">2</Span></TextBlock>
<TextBlock Text=")" />

在Span标记中为下标设置Baseallignment对我来说不起作用。 我尝试了以下代码,它工作正常。

  <TextBlock Text="H"  />
  <TextBlock Text="2" Margin="-2,0,-2,0" TextBlock.LineHeight="3" >   
  <TextBlock Text="O" />

答案 7 :(得分:1)

这是唯一对我有用的东西。它还可以让您更好地控制对齐和字体大小。

<TextBlock Grid.Row="17">
    3 x 3<Run FontSize="6pt" BaselineAlignment="TextTop">2</Run>)
</TextBlock>