FormattedText
WPFでテキストを下付き/上付きとして設定するにはどうすればよいですか?
8 に答える
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>
。
ただし、私の知る限り、フォントサイズを自分で縮小する必要があります。
一部の文字 (m 2、 m 3など) では上付き文字は必要ありませんが、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}}"/>
a を使用する利点はLayoutTransform
、フォントサイズに影響されないことです。後でフォントサイズが変更された場合、この上付き文字は、明示的な FontSize 設定が壊れている場所で機能します。
FormattedTextで特に機能するためにこれが必要かどうか、またはInlineの派生を意味するかどうかはわかりませんが、Typography.Variants = "Superscript"が機能しない場合でも、以下はInlinesで機能します。
TextRange selection = new TextRange(document.ContentStart, document.ContentEnd);
selection.ApplyPropertyValue(Inline.BaselineAlignmentProperty, BaselineAlignment.Superscript);
それが役に立てば幸い!
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>
これが私のために働いた唯一のものです。また、配置とフォント サイズをより詳細に制御できます。
<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" />