Try changing the style of the Hyperlink to remove the underline. Then add an underline to the inner TextBlock style itself.
An easier way to achieve that is to use Run instead of TextBlock.
Hope it helps.
This is a really, really annoying problem in WPF. I'd go so far as to call it a bug.
As @levanovd mentioned in his answer, you can get a hyperlink to wrap properly by using a Run
as the inner element:
<StackPanel>
<TextBlock TextWrapping="Wrap">
<Hyperlink><Run>This is a really long hyperlink. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink>
</TextBlock>
</StackPanel>
This works great, until you want to apply text formatting within the hyperlink. If you tried to do this, for example:
<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>
You'd get a compile error:
The object 'Run' already has a child and cannot add ''. 'Run' can accept only one child.
So, as @Scott Whitlock noted, you have to use a TextBlock
as the inner element and mess around with the TextDecoration
attributes of the Hyperlink
and TextBlock
instead:
<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. I really hate WPF's Hyperlink
element. It just doesn't work anything like you'd expect.