2009-08-09 22 views
15

Sto provando a creare un collegamento ipertestuale che contenga testo con super- e/o pedici. Ho trovato due modi per farlo, ed entrambi fanno schifo.Apice/pedice in collegamento ipertestuale in WPF

Soluzione n. 1: utilizzare Typography.Variants. Questo dà un magnifico apice ... per alcuni tipi di carattere.

<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

sembra bello in Palatino Linotype; ma per i caratteri che non supportano le varianti, viene semplicemente ignorato, non viene eseguita alcuna emulazione e il testo è a dimensione intera, al basale, al 100% normale. Preferirei consentire ai miei utenti finali di selezionare il tipo di carattere che si desidera utilizzare e avere ancora il lavoro super/subscripts.

Soluzione n. 2: utilizzare BaselineAlignment. Ciò solleva o abbassa il testo in modo appropriato, sebbene a differenza della soluzione n. 1, devo diminuire manualmente la dimensione del carattere. Tuttavia, è efficace per tutti i tipi di carattere. Il problema è la sottolineatura del collegamento ipertestuale.

<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

La sottolineatura viene sollevata ed abbassata insieme al testo, che sembra piuttosto misera. Preferirei avere una sottolineatura continua e ininterrotta sotto l'intero collegamento ipertestuale. (E prima che qualcuno suggerisca un Border, mi piacerebbe anche che il collegamento ipertestuale fosse in grado di eseguire il word-wrap, con tutte le parole sottolineate, compresa la prima riga.)

C'è un modo per rendere apice e pedice lavoro in WPF, in qualsiasi font, senza sembrare ridicolo quando sottolineato?

risposta

12

Se il collegamento ipertestuale non sta per avvolgere a più di una linea, poi incorporare un'altra TextBlock può funzionare:

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

Questo darà un solido collegamento ipertestuale sotto figlio del collegamento ipertestuale, il che significa un collegamento ipertestuale ininterrotta:

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

Tuttavia, se il TextBlock incorporato ha bisogno di avvolgere a più linee, avrete solo ge t una sottolineatura sotto l'intero paragrafo avvolto, piuttosto che sottolineare ogni riga di testo:

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

Se si può mettere un TextBlock solo circa un po 'a corto di contenuti che ha bisogno di apici - ad esempio, attorno al solo R^2 dell'esempio precedente - e lascia il resto del testo genitoriale al collegamento ipertestuale, quindi si evidenzia come normale. Ma a volte non è pratico, quindi è qualcosa a cui prestare attenzione.

1

È possibile utilizzare i caratteri Unicode in apice (ad es.http://www.fileformat.info/info/unicode/char/b2/index.htm)

Ti piace questa:

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

Risultato:

Result image

Ovviamente questo non funziona a meno che ciò che si è scripting super-realtà ha un carattere apice unicode.

Problemi correlati