Reputation: 244767
In my WPF application I have this:
<StackPanel>
<TextBlock>
<Hyperlink>
<TextBlock TextWrapping="Wrap" Name="HyperlinkText" />
</Hyperlink>
</TextBlock>
</StackPanel>
But if I set HyperlinkText.Text
to a long text that wraps, the whole text is underlined only once at the bottom (see image). Is there a way to have every line underlined separately without manual wrapping?
Upvotes: 17
Views: 6927
Reputation: 4165
An easier way to achieve that is to use Run
instead of TextBlock.
Hope it helps.
Upvotes: 9
Reputation: 41782
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.
Upvotes: 18
Reputation: 13839
Try changing the style of the Hyperlink to remove the underline. Then add an underline to the inner TextBlock style itself.
Upvotes: 2