2009-08-12 20 views
10

Nella mia applicazione WPF ho questo:capo automatico in WPF collegamento ipertestuale

<StackPanel> 
    <TextBlock> 
    <Hyperlink> 
     <TextBlock TextWrapping="Wrap" Name="HyperlinkText" /> 
    </Hyperlink> 
    </TextBlock> 
</StackPanel> 

Ma se ho impostato HyperlinkText.Text ad un lungo testo che avvolge, tutto il testo è sottolineato solo una volta in fondo (vedi immagine). C'è un modo per avere ogni linea sottolineata separatamente senza involucro manuale?

risposta

7

Un modo più semplice per ottenere ciò è utilizzare Run anziché TextBlock.

Spero che aiuti.

+0

Grazie, anche questo funziona ed è molto più semplice. (Ho dovuto spostare TextWrapping = "Wrap" dal TextBlock interno a quello esterno.) – svick

+0

Link non funziona più ... – fmuecke

1

provare a cambiare lo stile del collegamento ipertestuale per rimuovere la sottolineatura. Quindi aggiungi una sottolineatura allo stesso stile di TextBlock interno.

+0

Si prega di inserire un po 'di codice? Mi piacerebbe provare questo, ma non sono sicuro di come rimuovere la sottolineatura senza rompere il resto dello stile. E io sono pigro :-) – stone

+0

@skypecakes: la risposta di levanovd è migliore. Vedi questo per maggiori informazioni: http://www.longhorncorner.com/UploadFile/raj1979/TextWPF01062009041311AM/TextWPF.aspx –

+0

Grazie, Scott. Sembrava promettente, ma sfortunatamente non funzionerebbe per me perché sto compilando il testo con un binding di dati e su .Net 3.5. Non è possibile associare Run.Text in 3.5. Oggi sono meno pigro, quindi vedrò cosa posso inventare e postare i risultati come risposta alla domanda dell'OP, se è abbastanza buono. – stone

12

Questo è un problema davvero molto fastidioso in WPF. Andrei fino a definirlo un bug.

Come @levanovd menzionato nella sua risposta, è possibile ottenere un collegamento ipertestuale per avvolgere correttamente utilizzando un Run come elemento interno:

<StackPanel> 
     <TextBlock TextWrapping="Wrap"> 
      <Hyperlink><Run>This is a really long hyperlink. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink> 
     </TextBlock> 
    </StackPanel> 

Questa grande opera, fino a quando si desidera applicare la formattazione del testo all'interno di il collegamento ipertestuale. Se si è tentato di fare questo, per esempio:

<StackPanel> 
     <TextBlock TextWrapping="Wrap"> 
      <Hyperlink><Run>This is a really long <Run TextWeight="Bold">hyperlink</Run>. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink> 
     </TextBlock> 
    </StackPanel> 

Si otterrebbe un errore di compilazione:

The object 'Run' already has a child and cannot add ''. 'Run' can accept only one child.

Così, come ha notato @ Scott Whitlock, è necessario utilizzare un TextBlock come elemento interno e pasticciare con i TextDecoration attributi del Hyperlink e TextBlock invece:

<StackPanel> 
     <TextBlock> 
      <Hyperlink TextDecorations="None"><TextBlock TextWrapping="Wrap" TextDecorations="Underline">This is a really long <Run FontWeight="Bold">hyperlink</Run>. Yeah, a really really long hyperlink, whaddaya think?</TextBlock></Hyperlink> 
     </TextBlock> 
    </StackPanel> 

Sigh. Odio davvero l'elemento Hyperlink di WPF. Non funziona proprio come ti aspetteresti.

+1

Bella risposta! Ben riassunto! – Vincent

Problemi correlati