2009-08-09 9 views
15

J'essaie de créer un lien hypertexte qui contient du texte avec super- et/ou des indices. J'ai trouvé deux façons de le faire, et les deux sucent.Exposant/indice dans le lien hypertexte dans WPF

Solution n ° 1: utiliser Typography.Variants. Cela donne un exposant formidable ... pour certaines polices.

<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

est magnifique dans Palatino Linotype; mais pour les polices qui ne prennent pas en charge les variantes, elles sont simplement ignorées, aucune émulation n'est effectuée et le texte est de taille normale, au niveau de base, 100% normal. Je préférerais permettre à mes utilisateurs finaux de sélectionner la police qu'ils veulent utiliser, tout en conservant les super/souscriptions.

Solution n ° 2: utiliser BaselineAlignment. Cela augmente ou réduit le texte de manière appropriée, bien que contrairement à la solution n ° 1, je dois réduire la taille de la police manuellement. Pourtant, c'est efficace pour toutes les polices. Le problème est le soulignement de l'hyperlien.

<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

Le soulignement est levé et abaissé en même temps que le texte, ce qui semble assez misérable. Je préfère avoir un soulignement continu et ininterrompu sous l'Hyperlien entier. (Et avant que quelqu'un ne suggère une bordure, j'aimerais aussi que l'hyperlien soit en mesure de recouvrir les mots, avec tous les mots soulignés, y compris la première rangée.)

Y at-il un moyen de faire un travail en exposant et en indice dans WPF, dans n'importe quelle police, sans regarder ridiculement mauvais quand souligné?

Répondre

12

Si le lien ne va pas envelopper à plus d'une ligne, puis intégrer une autre TextBlock peut fonctionner:

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

Cela vous donnera un lien solide sous l'enfant du lien hypertexte, ce qui signifie un lien continu:

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

Cependant, si le TextBlock intégré doit envelopper plusieurs lignes, vous ne ge t-on souligné dans l'ensemble du paragraphe enveloppé, plutôt que de souligner chaque ligne de texte:

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

Si vous pouvez mettre un TextBlock seulement autour d'un court peu de contenu qui a besoin - par exemple des indices supérieurs, autour de seulement le R^2 dans l'exemple ci-dessus - et laisser le reste du texte parenté à l'hyperlien, alors vous avez souligné comme normal. Mais parfois, ce n'est pas pratique, alors c'est quelque chose à surveiller.

1

Vous pouvez utiliser les caractères unicode en exposant (par ex.http://www.fileformat.info/info/unicode/char/b2/index.htm)

Comme ceci:

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

Résultat:

Result image

travail Évidemment, cela ne sera pas moins que ce que vous êtes super script a en fait un caractère unicode superscript.

Questions connexes