我正在尝试创建一个包含超级和/或下标文本的超链接。我找到了两种方法来做到这一点,而且两者都很糟糕。
解决方案#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>
(来源:excastle.com)
Palatino Linotype看起来很漂亮;但对于不支持变体的字体,它只是被忽略,没有进行仿真,文本是全尺寸,基线,100%正常。我希望允许我的最终用户选择他们想要使用的字体,并且仍然可以使用超级/下标。
解决方案#2:使用BaselineAlignment。这会适当地提高或降低文本,但与解决方案#1不同,我必须手动减小字体大小。不过,它对所有字体都有效。问题是超链接的下划线。
<TextBlock FontSize="30" FontFamily="Palatino Linotype">
<Hyperlink>
R<Run BaselineAlignment="Superscript" FontSize="12pt">2</Run>
</Hyperlink>
</TextBlock>
下划线与文字一起升高和降低,看起来非常可怜。我宁愿在整个超链接下有一个连续的,不间断的下划线。 (在任何人建议使用Border之前,我也希望Hyperlink能够自动换行,所有单词都加下划线,包括第一行。)
有什么方法可以在WPF中以任何字体制作上标和下标,而在下划线时看起来不那么可笑吗?
答案 0 :(得分:12)
如果超链接不会换行到多行,则嵌入另一个TextBlock可以起作用:
<TextBlock FontSize="30" FontFamily="Palatino Linotype">
<Hyperlink>
<TextBlock>
R<Run BaselineAlignment="Superscript" FontSize="12pt">2</Run>
</TextBlock>
</Hyperlink>
</TextBlock>
这将在Hyperlink的子项下提供一个可靠的超链接,这意味着一个完整的超链接:
但是,如果嵌入的TextBlock需要换行到多行,那么在整个包装段落下只会有一个下划线,而不是为每行文本加下划线:
(来源:excastle.com)
如果你只能在需要上标的一小部分内容周围放置一个TextBlock - 例如,在上面的例子中只围绕R ^ 2 - 并将剩下的文本留给超链接,那么你得到强调正常。但有时这不实用,所以需要注意的事项。
答案 1 :(得分:1)
您可以使用上标unicode字符(例如http://www.fileformat.info/info/unicode/char/b2/index.htm)
像这样:
<TextBlock FontSize="30" FontFamily="Segoe UI">
<Hyperlink>
Apply R² Calculation
</Hyperlink>
</TextBlock>
结果:
显然除非你的超级脚本实际上有一个unicode上标字符,否则这不会起作用。