web-dev-qa-db-ja.com

上付き文字と下付き文字をwpfの書式付きテキストに設定する

WPFのFormattedTextで下付き/上付きとしていくつかのテキストを設定するにはどうすればよいですか?

38
Firoz

あなたは Typography.Variants を使用します:

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

<TextBlock>5x<Run BaselineAlignment="Superscript">4</Run> + 4</TextBlock>などを使用できます。

ただし、私が知る限り、フォントサイズを自分で減らす必要があります。

14
Matthias

一部のキャラクター(m2、mなど)上付き文字は必要ありませんが、Unicode文字を使用できます。例えば:

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

これはmを示します

10
Freek Sanders

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設定が壊れている場所で機能します。

10
Ramon de Klein

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>
3
Nitin Chaudhari

これがFormattedText 具体的にで機能する必要があるかどうか、またはInlineの派生を意味するかどうかはわかりませんが、Typography.Variants = "Superscript"が機能しなくても、以下はInlinesで機能します。

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

それが役に立てば幸い!

3
T. Webster

これは私のために働いた唯一のものです。また、配置とフォントサイズをより詳細に制御できます。

<TextBlock Grid.Row="17">
    3 x 3<Run FontSize="6pt" BaselineAlignment="TextTop">2</Run>)
</TextBlock>
2
MoMo

上付き文字の設定は、次のコードで正常に機能します。

<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" />
1
GCP