wpf wpf-controls subscript superscript formatted-text

Establecer superíndice y subíndice en texto formateado en wpf



wpf-controls subscript (8)

¿Cómo puedo establecer un texto como subíndice / superíndice en FormattedText en wpf


El ajuste de superíndice funciona bien con el siguiente código:

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

Establecer la alineación base para el subíndice en la etiqueta de 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" />


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

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

Esto mostraría m 3 .


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>


No sé si necesita esto para trabajar con FormattedText específicamente , o quiere decir derivaciones de Inline, pero lo siguiente funcionará en Inlines, incluso si Typography.Variants = "Superíndice" no funciona.

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

¡Espero eso ayude!


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

Sin embargo, hasta donde yo sé, tendrá que reducir el tamaño de letra usted mismo.


Typography.Variants funciona solo para fuentes de tipo abierto . Si no desea que sus superíndices / subíndices vayan más allá del texto actual, puede usar 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>


Usé una transformación 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 LayoutTransform . Si el tamaño de fuente se cambia después, este superíndice funciona donde se rompe la configuración de FontSize explícita.


Usas Typography.Variants :

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