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.