WPFのFormattedText
で下付き/上付きとしていくつかのテキストを設定するにはどうすればよいですか?
あなたは Typography.Variants を使用します:
<TextBlock>
<Run>Normal Text</Run>
<Run Typography.Variants="Superscript">Superscript Text</Run>
<Run Typography.Variants="Subscript">Subscript Text</Run>
</TextBlock>
<TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>
などを使用できます。
ただし、私が知る限り、フォントサイズを自分で減らす必要があります。
一部のキャラクター(m2、m3など)上付き文字は必要ありませんが、Unicode文字を使用できます。例えば:
<Run Text=" m³" />
これはmを示します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設定が壊れている場所で機能します。
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>
これがFormattedText 具体的にで機能する必要があるかどうか、またはInlineの派生を意味するかどうかはわかりませんが、Typography.Variants = "Superscript"が機能しなくても、以下はInlinesで機能します。
TextRange selection = new TextRange(document.ContentStart, document.ContentEnd);
selection.ApplyPropertyValue(Inline.BaselineAlignmentProperty, BaselineAlignment.Superscript);
それが役に立てば幸い!
これは私のために働いた唯一のものです。また、配置とフォントサイズをより詳細に制御できます。
<TextBlock Grid.Row="17">
3 x 3<Run FontSize="6pt" BaselineAlignment="TextTop">2</Run>)
</TextBlock>
上付き文字の設定は、次のコードで正常に機能します。
<TextBlock Text="(cm" />
<TextBlock ><Span BaselineAlignment="Top" FontSize="8">2</Span></TextBlock>
<TextBlock Text=")" />
Spanタグで下付き文字のBaseallignmentを設定しても、うまくいきませんでした。私は次のコードを試してみましたが、うまくいきました。
<TextBlock Text="H" />
<TextBlock Text="2" Margin="-2,0,-2,0" TextBlock.LineHeight="3" >
<TextBlock Text="O" />