在我的WPF应用程序中,我有这个:
<StackPanel>
<TextBlock>
<Hyperlink>
<TextBlock TextWrapping="Wrap" Name="HyperlinkText" />
</Hyperlink>
</TextBlock>
</StackPanel>
但是,如果我将HyperlinkText.Text
设置为包装的长文本,则整个文本仅在底部加下划线一次(参见图像)。有没有办法让每一行都单独加下划线而不需要人工包装?
答案 0 :(得分:13)
这在WPF中确实是一个非常烦人的问题。我甚至把它称为一个错误。
正如@levanovd在他的回答中提到的,你可以通过使用Run
作为内部元素来获得一个正确包装的超链接:
<StackPanel>
<TextBlock TextWrapping="Wrap">
<Hyperlink><Run>This is a really long hyperlink. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink>
</TextBlock>
</StackPanel>
这很有效,直到您想在超链接中应用文本格式。如果您尝试这样做,例如:
<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>
你会收到编译错误:
对象'Run'已经有一个孩子,无法添加''。 'Run'只能接受一个孩子。
所以,正如@Scott Whitlock指出的那样,你必须使用TextBlock
作为内部元素,而不是使用TextDecoration
和Hyperlink
的{{1}}属性:
TextBlock
叹息。我真的很讨厌WPF的 <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>
元素。它只会像你期望的那样起作用。
答案 1 :(得分:8)
实现这一目标的更简单方法是使用Run而不是TextBlock。
希望它有所帮助。
答案 2 :(得分:1)
尝试更改超链接的样式以删除下划线。然后在内部TextBlock样式本身添加下划线。