تعيين SuperScript و Subcript في النص المنسق في WPF
-
21-09-2019 - |
سؤال
كيف يمكنني ضبط بعض النص كـ 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³" />
هذا سيظهر م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>