2010-01-19 77 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;" /> 

這將顯示米。

相關問題