Верхний индекс / индекс в гиперссылке в WPF - PullRequest
15 голосов
/ 09 августа 2009

Я пытаюсь создать гиперссылку, содержащую текст с супер- и / или индексами. Я нашел два способа сделать это, и оба они отстой.

Решение № 1: использовать Типография. Варианты . Это дает потрясающий верхний индекс ... для некоторых шрифтов.

<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 )

Красиво выглядит в Палатино Линотипа; но для шрифтов, которые не поддерживают варианты, это просто игнорируется, эмуляция не выполняется, и текст является полноразмерным, на базовом уровне, на 100% нормальным. Я бы предпочел, чтобы мои конечные пользователи выбирали шрифт, который они хотели бы использовать, и при этом работали супер / подписчики.

Решение № 2: используйте BaselineAlignment . Это повышает или уменьшает текст соответствующим образом, хотя в отличие от решения № 1, мне приходится уменьшать размер шрифта вручную. Тем не менее, это эффективно для всех шрифтов. Проблема в подчеркивании Гиперссылки.

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

Подчеркивание поднимается и опускается вместе с текстом, который выглядит довольно убогим. Я предпочел бы иметь непрерывное, непрерывное подчеркивание под всей гиперссылкой. (И прежде чем кто-либо предложит Границу, я бы также хотел, чтобы Гиперссылка могла переносить слова, подчеркнув все слова, включая первый ряд.)

Есть ли способ заставить верхний и нижний индексы работать в WPF любым шрифтом, не выглядя смешно плохо при подчеркивании?

Ответы [ 2 ]

12 голосов
/ 08 августа 2010

Если гиперссылка не будет переноситься более чем на одну строку, то встраивание другого TextBlock может работать:

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

Это даст твердую гиперссылку под дочерней гиперссылкой, что означает непрерывную гиперссылку:

Однако, если встроенный текстовый блок нужно переносить на несколько строк, вы получите только одно подчеркивание под всем переносимым абзацем, а не подчеркивание каждой строки текста:


(источник: excastle.com )

Если вы можете поместить TextBlock только вокруг небольшого фрагмента контента, для которого нужны верхние индексы (например, только R ^ 2 в приведенном выше примере), и оставить оставшуюся часть текста с гиперссылкой, тогда вы получите подчеркивая как обычно. Но иногда это не практично, так что стоит остерегаться.

1 голос
/ 05 июля 2013

Вы можете использовать надстрочные символы 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

Очевидно, что это не сработает, если только то, что вы используете для создания супер-сценариев, на самом деле не имеет символа надстрочного индекса в юникоде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...