WPF超链接中的文本换行

时间:2009-08-12 14:48:42

标签: wpf xaml hyperlink wrapping

在我的WPF应用程序中,我有这个:

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

但是,如果我将HyperlinkText.Text设置为包装的长文本,则整个文本仅在底部加下划线一次(参见图像)。有没有办法让每一行都单独加下划线而不需要人工包装?

3 个答案:

答案 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作为内部元素,而不是使用TextDecorationHyperlink的{​​{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样式本身添加下划线。