2010-01-19 57 views

回答

41

您使用Typography.Variants

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

有一些已知的错误,至少从.Net 4.0起:http://social.msdn.microsoft.com/Forums/en/wpf/thread/f375a41b-2c36-4e51-8f6b-7ed828431412。不知道它是否固定在.Net 4.5中。 – skybluecodeflier 2012-03-20 17:35:30

+0

如果有人得到这个与Win7的bug看看这个链接来解决它support.microsoft.com/kb/2670838 – WiiMaxx 2013-03-07 15:09:21

+5

应该指出,Windows(和WPF)的默认UI字体支持Windows 8之前的下标或上标。 – 2013-04-05 20:02:29

11

您可以使用类似<TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>设置一些文本作为下标/上标在FormattedText。

但是,据我所知,你将不得不减小字体大小。

+0

在每次运行后添加空间是否正常?否则它工作正常。 – 2014-08-26 13:49:25

+0

为我工作,谢谢! – 2015-05-24 23:43:05

3

我不知道你是否需要这个与FormattedText 专门工作,或者你的意思是行内的推导,但即使下面的工作就内联,印刷术.Variants =“Superscript”无法正常工作。

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

希望它有帮助!

+0

在我的测试中,基于RichTextBox以及其他以粗体,斜体,下划线,字体系列/颜色/大小成功的方式失败。我使用相同的.ApplyPropertyValue()与所有这些。我使用了ToggleButton,所以我验证了对齐是否已设置并记住,但没有视觉效果。 – person27 2017-10-02 19:32:38

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> 
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" /> 
8

我使用的布局转换,因为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设置中断的情况下起作用。

0

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

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

有趣的是要注意,某些字符(M ,男等)不需要标,但可以使用Unicode字符。例如:

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

这将显示米。