43

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

4

8 回答 8

49

您使用Typography.Variants

<TextBlock>
    <Run>Normal Text</Run>
    <Run Typography.Variants="Superscript">Superscript Text</Run>
    <Run Typography.Variants="Subscript">Subscript Text</Run>
</TextBlock>
于 2010-01-19T17:54:53.697 回答
18

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

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

于 2010-01-19T17:43:22.010 回答
17

有趣的是,对于某些字符(m 2、 m 3等),不需要上标,但可以使用 unicode 字符。例如:

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

这将显示 m 3

于 2016-12-19T13:19:21.203 回答
12

我使用了布局转换,因为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}}"/>

使用 a 的好处LayoutTransform是它对字体大小不敏感。如果随后更改了字体大小,则此上标适用于显式 FontSize 设置中断的位置。

于 2014-08-07T14:23:10.483 回答
3

我不知道您是否需要它来专门使用 FormattedText ,或者您的意思是 Inline 的派生,但是即使 Typography.Variants="Superscript" 无法正常工作,以下内容也适用于 Inlines。

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

希望能帮助到你!

于 2010-10-03T23:32:27.930 回答
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>
于 2010-11-01T13:12:45.657 回答
2

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

<TextBlock Grid.Row="17">
    3 x 3<Run FontSize="6pt" BaselineAlignment="TextTop">2</Run>)
</TextBlock>
于 2015-03-13T15:55:05.973 回答
0

上标设置适用于以下代码:

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

在 Span 标签中为下标设置 Basealalignment 对我不起作用。我尝试了以下代码,它运行良好。

  <TextBlock Text="H"  />
  <TextBlock Text="2" Margin="-2,0,-2,0" TextBlock.LineHeight="3" >   
  <TextBlock Text="O" />
于 2013-07-16T07:47:58.737 回答