2010-01-19 13 views

risposta

41

si utilizza Typography.Variants:

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

Ci sono alcuni bug noti con questo, almeno da .Net 4.0: http://social.msdn.microsoft.com/Forums/en/wpf/thread/f375a41b-2c36-4e51-8f6b-7ed828431412. Non so se è stato risolto in .Net 4.5. – skybluecodeflier

+0

se qualcuno ottiene questo bug con Win7 guarda questo link per risolverlo support.microsoft.com/kb/2670838 – WiiMaxx

+5

Va notato che il font UI di default per Windows (e WPF) non supporta né pedici né superscripts prima di Windows 8 . –

11

Si può usare qualcosa di simile <TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>.

Tuttavia, per quanto ne so, sarà necessario ridurre la dimensione del carattere.

+0

È normale che dopo ogni corsa venga aggiunto uno spazio? Funziona bene altrimenti. –

+0

Ha funzionato per me, grazie! –

3

Non so se avete bisogno di questo per lavorare con FormattedText specificamente, o vuoi dire derivazioni di linea, ma quanto segue funziona su Inlines, anche se Tipografia .Variants = "Superscript" non funziona.

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

Spero che sia d'aiuto!

+0

Questo fallisce miseramente nei miei test, basato su RichTextBox e in caso contrario con grassetto, corsivo, sottolineato, famiglia di caratteri/colore/dimensione. Io uso lo stesso. ApplyPropertyValue() con tutti questi. Uso ToggleButton per verificare che l'allineamento sia impostato e ricordato, ma senza effetti visivi. – person27

3

Typography.Varianti funziona solo per tipo di carattere aperto. Se non vi piacciono i tuoi Apici/indici che vanno al di fuori l'altezza del testo effettivo, allora si può usare qualcosa di simile a quanto segue:

<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

Impostazione per apice funziona bene con il seguente codice:

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

Impostazione L'allineamento di base per pedici nel tag Span non ha funzionato per me. Ho provato il seguente codice e ha funzionato bene.

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

ho usato un layout trasformare, perché Typography.Variants spesso non funziona:

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

Il vantaggio di utilizzare un LayoutTransform è che è insensibile alla fontsize. Se in seguito viene modificato il carattere fontsize, questo apice funziona dove si interrompe l'impostazione di FontSize esplicita.

0

Questa è l'unica cosa che ha funzionato per me. Ti dà anche più controllo sull'allineamento e sulla dimensione del carattere.

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

E 'interessante notare che per alcuni personaggi (m , m , ecc) un apice non è necessaria, ma il carattere unicode può essere utilizzato. Per esempio:

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

Ciò mostrerebbe m .