2009-08-09 143 views
15

我试图制作一个超链接,其中包含超文本和/或下标文本。我发现有两种方法可以做到这一点,并且他们都吸吮。WPF超链接中的上标/下标

解决方案#1:使用Typography.Variants。这为一些字体提供了一个了不起的上标。

<StackPanel> 
    <TextBlock FontFamily="Palatino Linotype" FontSize="30"> 
    <Hyperlink>R<Run Typography.Variants="Superscript">2</Run></Hyperlink> 
    (Palatino Linotype) 
    </TextBlock> 
    <TextBlock FontFamily="Segoe UI" FontSize="30"> 
    <Hyperlink>R<Run Typography.Variants="Superscript">2</Run></Hyperlink> 
    (Segoe UI) 
    </TextBlock> 
</StackPanel> 

http://www.excastle.com/misc/wpf-superscript-fontvariants.png

在帕拉蒂诺莱诺看上去很美;但对于不支持变体的字体,它会被忽略,不会进行仿真,并且文本是全尺寸,基线为100%正常。我宁愿让我的最终用户选择他们想使用的字体,并仍然有超级/下标工作。

解决方案#2:使用BaselineAlignment。这会适当地提高或降低文本,但与解决方案#1不同,我必须手动减小字体大小。不过,它对所有字体都很有效。问题是超链接的下划线。

<TextBlock FontSize="30" FontFamily="Palatino Linotype"> 
    <Hyperlink> 
    R<Run BaselineAlignment="Superscript" FontSize="12pt">2</Run> 
    </Hyperlink> 
</TextBlock> 

http://www.excastle.com/misc/wpf-superscript-baselinealignment.png

下划线升高,并与文字,这看起来很猥琐一起下降。我宁愿在整个超链接下连续不间断地加下划线。 (并且在任何人建议边框之前,我还希望超链接能够进行自动换行,包括第一行在内的所有文字都加下划线。)

是否有任何方法可以使上标和下标起作用在WPF中,以任何字体,在强调时没有看起来可笑的不好?

回答

12

如果超链接是不会换到多行,然后嵌入另一个TextBlock中能正常工作:

<TextBlock FontSize="30" FontFamily="Palatino Linotype"> 
    <Hyperlink> 
    <TextBlock> 
     R<Run BaselineAlignment="Superscript" FontSize="12pt">2</Run> 
    </TextBlock> 
    </Hyperlink> 
</TextBlock> 

这将给超链接的孩子,这意味着一个完整的超级链接下了坚实的超级链接:

http://www.excastle.com/misc/wpf-superscript-baselinealignment-better.png

然而,如果嵌入的TextBlock需要换到多行,你会止戈t的一个下划线下整个包裹款,而不是强调文本的每一行:

http://www.excastle.com/misc/wpf-superscript-baselinealignment-badwrap.png

如果你可以把一个TextBlock只有大约需要标内容的短位 - 例如,围绕上面例子中的R^2,并将剩余的文本保留给超链接,然后将其强调为正常。但有时候这是不切实际的,所以需要注意。

1

您可以使用上标unicode字符(例如,http://www.fileformat.info/info/unicode/char/b2/index.htm

像这样:

<TextBlock FontSize="30" FontFamily="Segoe UI"> 
    <Hyperlink> 
     Apply R² Calculation 
    </Hyperlink> 
</TextBlock> 

结果:

Result image

显然,这是行不通的,除非你是超级脚本究竟有一个Unicode字符标。