سؤال

كيف يمكنني ضبط بعض النص كـ subcript/supercript في FormattedText في WPF؟

هل كانت مفيدة؟

المحلول

انت تستخدم الطباعة:

<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>.

ومع ذلك ، على حد علمي ، سيكون عليك تقليل حجم الخط بنفسك.

لقد استخدمت تحويل تخطيط ، لأن 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 هو أنه غير حساس لخطوط الحجم. إذا تم تغيير حجم الخطوط بعد ذلك ، فإن هذا supercript يعمل حيث يتم إعداد فترات إعداد الخطوط الصريحة.

من المثير للاهتمام أن نلاحظ ذلك بالنسبة لبعض الشخصيات (م2, ، م3, ، وما إلى ذلك) ليست هناك حاجة إلى SuperScript ، ولكن يمكن استخدام حرف Unicode. علي سبيل المثال:

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

هذا سيظهر م3.

لا أعرف ما إذا كنت بحاجة إلى هذا للعمل مع FormattedText على وجه التحديد, ، أو تقصد مشتقات المضمّنة ، لكن ما يلي سيعمل على الخطوط الجارية ، حتى لو فشل الطباعة.

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

أتمنى أن يساعد!

الطباعة. افتح الخطوط. إذا كنت لا تحب SuperScripts/Screcripts التي تخرج من ارتفاع النص الفعلي ، فيمكنك استخدام شيء مثل ما يلي:

<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>

يعمل الإعداد لـ SuperScript بشكل جيد مع الكود التالي:

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

هذا هو الشيء الوحيد الذي نجح بالنسبة لي. كما أنه يمنحك المزيد من التحكم في المحاذاة وحجم الخط.

<TextBlock Grid.Row="17">
    3 x 3<Run FontSize="6pt" BaselineAlignment="TextTop">2</Run>)
</TextBlock>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top