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