代码之家  ›  专栏  ›  技术社区  ›  svick Raja Nadar

WPF超链接中的文字环绕

  •  11
  • svick Raja Nadar  · 技术社区  · 16 年前

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

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

    但是如果我设定 HyperlinkText.Text 对于换行的长文本,整个文本只在底部加一次下划线(参见图)。有没有一种方法可以让每一行单独划线,而不需要手动包装?

    3 回复  |  直到 7 年前
        1
  •  7
  •   Scott Whitlock    15 年前

    实现这一目标的一个简单方法是 Run 而不是文本块。

    希望它有帮助。

        2
  •  12
  •   dthrasher    15 年前

    在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 控件 而是:

        <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 超链接 元素。它不会像你期望的那样工作。

        3
  •  1
  •   Scott Whitlock    16 年前

    尝试更改超链接的样式以删除下划线。然后向内部文本块样式本身添加下划线。