2009-08-12 10 views
10

En mi aplicación WPF tengo esto:Justificación de texto en WPF hipervínculo

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

Pero si fijo HyperlinkText.Text a un texto largo que se envuelve, todo el texto está subrayado sólo una vez en la parte inferior (ver imagen). ¿Hay alguna manera de tener cada línea subrayada por separado sin envoltura manual?

Respuesta

7

Una forma más fácil de lograr eso es usar Run en lugar de TextBlock.

Espero que ayude.

+0

Gracias, eso también funciona y es mucho más simple. (Tuve que mover el TextWrapping = "Wrap" del TextBlock interno al externo.) – svick

+0

El enlace ya no funciona ... – fmuecke

1

trate de cambiar el estilo del mismo hiperenlace a quitar el subrayado. A continuación, agregue un subrayado al estilo interno de TextBlock.

+0

¿Deseas publicar algún código? Me gustaría probar esto, pero no estoy seguro de cómo eliminar el subrayado sin romper el resto del estilo. Y soy flojo :-) – stone

+0

@skypecakes: la respuesta de levanovd es mejor. Consulte esto para obtener más información: http://www.longhorncorner.com/UploadFile/raj1979/TextWPF01062009041311AM/TextWPF.aspx –

+0

Gracias, Scott. Parecía prometedor, pero desafortunadamente no funcionará para mí porque estoy completando el texto con un enlace de datos y en .Net 3.5. No puede enlazar Run.Text en 3.5. Hoy soy menos vago, así que veré qué puedo hacer y publicar los resultados como una respuesta a la pregunta del OP, si es lo suficientemente bueno. – stone

12

Este es un problema muy, muy molesto en WPF. Iba tan lejos como para llamarlo un error.

Como @levanovd mencionado en su respuesta, se puede obtener un hipervínculo para envolver adecuadamente mediante el uso de un Run como el elemento interior:

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

Esto funciona muy bien, hasta que desee aplicar formato de texto dentro de el hipervínculo. Si se trató de hacer esto, por ejemplo:

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

Te obtener un error de compilación:

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

Por lo tanto, como se ha señalado @ Scott Whitlock, usted tiene que utilizar un TextBlock como el elemento interior y perder el tiempo con los atributos de la TextDecorationHyperlink y TextBlock lugar:

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

suspiro. Realmente odio el elemento Hyperlink de WPF. Simplemente no funciona como esperabas.

+1

¡Buena respuesta! ¡Bien resumido! – Vincent

Cuestiones relacionadas