WPF超链接中的文本换行

svi*_*ick 13 wpf xaml hyperlink word-wrap

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

<StackPanel>
  <TextBlock>
     <Hyperlink>
       <TextBlock TextWrapping="Wrap" Name="HyperlinkText" />
     </Hyperlink>
  </TextBlock>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

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

dth*_*her 14

这是WPF中一个非常非常烦人的问题.我甚至称它为虫子.

正如@levanovd在他的回答中提到的,你可以使用a 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>
Run Code Online (Sandbox Code Playgroud)

这很有效,直到您想要超链接中应用文本格式.如果您尝试这样做,例如:

    <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 Code Online (Sandbox Code Playgroud)

你会得到一个编译错误:

对象'Run'已经有一个孩子,无法添加''.'Run'只能接受一个孩子.

所以,作为@Scott惠特洛克注意,你必须使用一个TextBlock为内部元件和周围乱用TextDecoration的属性HyperlinkTextBlock替代:

    <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>
Run Code Online (Sandbox Code Playgroud)

叹.我真的很讨厌WPF的Hyperlink元素.它只是没有像你期望的那样工作.


lev*_*ovd 8

实现这一目标的更简单方法是使用Run而不是TextBlock.

希望能帮助到你.