2010-01-19 82 views

Respuesta

41

Se utilizan Typography.Variants:

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

Hay algunos errores conocidos con esto, al menos a partir de .Net 4.0: http://social.msdn.microsoft.com/Forums/en/wpf/thread/f375a41b-2c36-4e51-8f6b-7ed828431412. No sé si está corregido en .Net 4.5. – skybluecodeflier

+0

si alguien obtiene este error con Win7, mire este enlace para solucionarlo support.microsoft.com/kb/2670838 – WiiMaxx

+5

Debe tenerse en cuenta que la fuente de IU predeterminada para Windows (y WPF) no admite subíndices ni superíndices antes de Windows 8 . –

11

Usted puede usar algo como <TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>.

Sin embargo, que yo sepa, tendrá que reducir el tamaño de letra usted mismo.

+0

¿Es normal que después de cada ejecución se agregue un espacio? Funciona bien de lo contrario. –

+0

¡Trabajó para mí, gracias! –

3

No sé si es necesario que esto funcione con FormattedText específicamente, o que significa derivaciones de línea, pero el siguiente trabajo en inlines, incluso si la tipografía .Variants = "Superíndice" no funciona.

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

Espero que ayude!

+0

Esto falla miserablemente en mis pruebas, basado en RichTextBox y de otro modo exitoso con negrita, cursiva, subrayado, familia de fuentes/color/tamaño. Yo uso el mismo .ApplyPropertyValue() con todos ellos. Yo uso ToggleButton así que verifico que la alineación está establecida y recordada, pero sin efecto visual. – person27

3

Typography.Variants funciona solo para tipo de letra abierta. Si no te gusta sus superíndices/subíndices que van fuera de la altura del texto real, puede utilizar algo como lo siguiente:

<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

Ajuste para superíndice funciona bien con el siguiente código:

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

Ajuste de la La alineación base para el subíndice en la etiqueta Span no funcionó para mí. Probé el siguiente código y funcionó bien.

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

que utiliza una transformada de diseño, porque Typography.Variants menudo no funciona:

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

La ventaja de usar un LayoutTransform es que es insensible al tamaño de fuente. Si el tamaño de fuente se cambia después, este superíndice funciona donde se rompe la configuración de FontSize explícita.

0

Esto es lo único que funcionó para mí. También le da más control sobre la alineación y el tamaño de la fuente.

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

Es interesante notar que para algunos caracteres (m , m , etc) no se necesita un superíndice, pero el carácter Unicode se puede utilizar. Por ejemplo:

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

Esto demostraría m .

Cuestiones relacionadas