2009-08-09 33 views
15

Estoy tratando de hacer un hipervínculo que contenga texto con super- y/o subíndices. He encontrado dos formas de hacer esto, y ambos apestan.Superíndice/subíndice en hipervínculo en WPF

Solución n. ° 1: use Typography.Variants. Esto da un excelente superíndice ... para algunas fuentes.

<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

se ve hermosa en Palatino Linotype; pero para las fuentes que no admiten variantes, simplemente se ignora, no se realiza la emulación, y el texto es de tamaño completo, al inicio del estudio, 100% normal. Preferiría permitir que mis usuarios finales seleccionen la fuente que quieren usar, y aún así tienen super/subíndices.

Solución n. ° 2: use BaselineAlignment. Esto aumenta o reduce el texto de forma apropiada, aunque a diferencia de la solución n. ° 1, tengo que disminuir el tamaño de la fuente manualmente. Aún así, es efectivo para todas las fuentes. El problema es el subrayado del hipervínculo.

<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

El subrayado es subido y bajado junto con el texto, que se ve muy infeliz. Prefiero tener un subrayado continuo e ininterrumpido debajo de todo el hipervínculo. (Y antes de que alguien sugiera un borde, también me gustaría que el hipervínculo pueda ajustar las palabras, con todas las palabras subrayadas, incluida la primera fila.)

¿Hay alguna manera de hacer que los superíndices y los subíndices funcionen? en WPF, en cualquier fuente, sin parecer ridículamente malo cuando está subrayado?

Respuesta

12

Si el hipervínculo no va a envolver a más de una línea, a continuación, la incorporación de otra TextBlock puede trabajar:

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

Esto le dará un hipervínculo sólido bajo infantil del hipervínculo, lo que significa un hipervínculo ininterrumpida:

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

Sin embargo, si el TextBlock incrustado necesita para envolver a varias líneas, podrás única ge t uno de subrayado debajo de todo el párrafo envuelto, en lugar de subrayar cada línea de texto:

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

Si usted puede poner un TextBlock a tan sólo un corto poco de contenido que necesita superíndices - por ejemplo, solo alrededor de R^2 en el ejemplo anterior - y deje el resto del texto emparentado al hipervínculo, luego se subraya de forma normal. Pero a veces eso no es práctico, así que es algo de lo que debes cuidarte.

1

Puede usar los caracteres superíndices Unicode (p. Ej.http://www.fileformat.info/info/unicode/char/b2/index.htm)

De esta manera:

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

Resultado:

Result image

Obviamente, esto no funcionará a menos que lo que eres súper scripting en realidad tiene un carácter Unicode superíndice.

Cuestiones relacionadas