【问题标题】:Superscript / subscript in hyperlink in WPFWPF中超链接中的上标/下标
【发布时间】:2019-04-13 03:59:23
【问题描述】:

我正在尝试创建一个包含带有上标和/或下标的文本的超链接。我找到了两种方法来做到这一点,但它们都很糟糕。

解决方案#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>

下划线随着文字的升高和降低,看起来很猥琐。我宁愿在整个超链接下有一个连续的、不间断的下划线。 (在有人建议边框之前,我还希望超链接能够自动换行,所有单词都加下划线,包括第一行。)

有没有什么方法可以使上标和下标在 WPF 中以任何字体工作,而在下划线时不会看起来很糟糕?

【问题讨论】:

    标签: wpf xaml fonts


    【解决方案1】:

    如果超链接不会换行超过一行,则嵌入另一个 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 ——并将其余文本作为超链接的父级,那么你会得到下划线正常。但有时这并不实用,因此需要提防。

    【讨论】:

      【解决方案2】:

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

      像这样:

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

      结果:

      显然,除非您正在编写的超级脚本实际上具有 unicode 上标字符,否则这将不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-09
        • 2013-05-06
        • 1970-01-01
        • 2011-07-24
        • 2016-04-30
        • 2014-04-29
        • 2016-05-02
        相关资源
        最近更新 更多