这是代码:
static readonly char[] s_expChar = "eE".ToCharArray();
static void setValue( TextBlock target, double val )
{
string text = val.ToString();
int indE = text.IndexOfAny( s_expChar );
if( indE > 0 )
{
string normal = text.Substring( 0, indE ) + "·10";
string ss = text.Substring( indE + 1 );
if( ss.StartsWith( "0" ) )
ss = ss.Substring( 1 );
else if( ss.StartsWith( "-0" ) )
ss = "-" + ss.Substring( 2 );
target.Inlines.Clear();
target.Inlines.Add( new Run( normal ) );
Run rSuper = new Run( ss );
Typography.SetVariants( rSuper, FontVariants.Superscript );
target.Inlines.Add( rSuper );
}
else
{
target.Text = text;
}
}
以下是输出:
如您所见,-
字符的垂直对齐方式已损坏,似乎不受FontVariants.Superscript
的影响。如何解决?
在实时可视树的调试器中,我看到2个运行时的值正确,即第二个运行时的文本为-6
,其中包含-
答案 0 :(得分:1)
Typography.Variants
应该与正确的字体和正确的字符一起使用。因此,例如,这段XAML不能正常工作:
<TextBlock FontSize="20">
<TextBlock.Inlines>
<Run Text="2e" />
<Run Typography.Variants="Superscript" Text="-3" />
</TextBlock.Inlines>
</TextBlock>
您注意到,“-”符号未按预期对齐。实际上,Typography.Variants
仅适用于OpenType font(我建议您 Palatino Linotype 或 Segoe UI )。此外,将负号与Superscript
的印刷变形一起使用是不正确的:正确的字符称为superscript minus(⁻
是其十进制表示形式)。
因此正确的XAML将是:
<TextBlock FontSize="20" FontFamily="Segoe UI">
<TextBlock.Inlines>
<Run Text="2e" />
<Run Typography.Variants="Superscript" Text="⁻3" />
</TextBlock.Inlines>
</TextBlock>
,它将按预期显示。希望它能对您有所帮助。