在WPF超链接文本换行(Text wrapping in WPF hyperlink)

2019-08-01 01:53发布

在我的WPF应用程序我有这样的:

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

但是,如果我设置HyperlinkText.Text到一个封装了长文,整个文本是在底部(见图片)强调只有一次。 有没有办法有每一行无需人工包装单独强调?

Answer 1:

一个简单的方法来实现那就是使用运行 ,而不是TextBlock的。

希望能帮助到你。



Answer 2:

这是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>

你会得到一个编译错误:

对象“运行”已经有了一个孩子,不能添加'。 “运行”可以接受只生一个孩子。

所以,作为@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>

叹。 我真的很讨厌WPF的Hyperlink元素。 这是行不通的事情像你期望的那样。



Answer 3:

试着改变超链接的样式删除下划线。 然后下划线添加到内部TextBlock的风格本身。



文章来源: Text wrapping in WPF hyperlink