Как я могу установить некоторый текст в качестве нижнего или верхнего индекса в FormattedText
в WPF?
Установите надстрочный индекс и индекс в форматированном тексте в wpf
Ответ 1
Вы используете Typography.Variants:
<TextBlock>
<Run>Normal Text</Run>
<Run Typography.Variants="Superscript">Superscript Text</Run>
<Run Typography.Variants="Subscript">Subscript Text</Run>
</TextBlock>
Ответ 2
Вы можете использовать что-то вроде <TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>
.
Однако, насколько мне известно, вам придется уменьшить размер шрифта самостоятельно.
Ответ 3
Я использовал преобразование макета, потому что 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.
Ответ 4
Интересно отметить, что для некоторых символов (m 2 m 3 и т.д.) надстрочный шрифт не нужен, но можно использовать символ Юникода. Например:
<Run Text=" m³" />
Это означало бы m 3.
Ответ 5
Я не знаю, нужно ли вам это работать с FormattedText специально, или вы имеете в виду вывод Inline, но следующее будет работать на Inlines, даже если Typography.Variants = "Superscript" не работает.
TextRange selection = new TextRange(document.ContentStart, document.ContentEnd);
selection.ApplyPropertyValue(Inline.BaselineAlignmentProperty, BaselineAlignment.Superscript);
Надеюсь, что это поможет!
Ответ 6
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>
Ответ 7
Настройка надстрочного текста отлично работает со следующим кодом:
<TextBlock Text="(cm" />
<TextBlock ><Span BaselineAlignment="Top" FontSize="8">2</Span></TextBlock>
<TextBlock Text=")" />
Настройка Baseallignment для индекса в теге Span не работала для меня. Я пробовал следующий код, и он работал нормально.
<TextBlock Text="H" />
<TextBlock Text="2" Margin="-2,0,-2,0" TextBlock.LineHeight="3" >
<TextBlock Text="O" />
Ответ 8
Это единственное, что сработало для меня. Это также дает вам больше контроля над выравниванием и размером шрифта.
<TextBlock Grid.Row="17">
3 x 3<Run FontSize="6pt" BaselineAlignment="TextTop">2</Run>)
</TextBlock>