WPF Richtextbox中的超链接

5

我从Xaml字符串中加载WPF RichTextBox内容,其中包含一些超链接。 当它加载到控件中时,超链接无法点击! 我想要单击它们并显示其关联的URL。


2
richTextBox.IsDocumentEnabled = true; 赋值为真。 - Ernesto Alfonso
3个回答

9

不是关于freschx,而是关于WPF。与WinForms中的RichTextBox不同,WPF的RichTextBox没有DetectUrls属性。你为此编写Xaml代码很奇怪,更奇怪的是有人认为它有用。

请查看这篇文章,在那里JHubbard80和我有两种不同的方法来解决这个问题。


0
为了使超链接(或任何内联UIElement)可以进行点击测试,我们必须将RichTextBox.IsDocumentEnabled设置为true。
为了使超链接在不按下Ctrl键的情况下可点击,必须将超链接设为只读,例如将其包装在TextBlock中或通过将整个RichTextBox设为只读(通过将RichTextBox.IsReadOnly设置为false)。
<RichTextBox IsDocumentEnabled="True">
  <FlowDocument>
    <Paragraph>
      <Run Text="Some editable text" />

      <TextBlock>                
        <Hyperlink NavigateUri="https://duckduckgo.com">
          DuckDuckGo
        </Hyperlink>
      </TextBlock>
    </Paragraph>
  </FlowDocument>
</RichTextBox>

超链接必须设为只读。不,可以使超链接在运行时代码后端中可点击,例如使用以下代码:new Hyperlink(rtbxTextArea.Selection.Start, rtbxTextArea.Selection.End) 不需要包装。但问题是,如果加载同一文档,超链接在加载后就无法点击。需要在加载后重新设置。 - undefined
@livan3li 这个声明与“交互行为”有关,而不是关于首次使超链接可点击。当然,默认情况下它是可点击的,否则就会很奇怪。如果不将包含超链接的span配置为只读,用户将不得不按下Ctrl键才能启用点击导航。这是默认行为。否则,你只会将光标焦点移动到被点击位置的富文本框中,允许用户编辑内容。我从未说过超链接在其他情况下不可点击。请仔细阅读。 - undefined
@livan3li 完整且相关的引用是:“使超链接可点击,而无需按下Ctrl键[...]”。请注意,您提供的解决方案表现非常糟糕。FlowDocument,尤其是RichtextBox,是一个非常沉重的控件。您绝对应该避免使用您的方法。它根本无法扩展。 - undefined
@livan3li 还有一点很重要,就是要明白超链接的行为是由其所在的父级容器定义的。超链接对象本身并不导航到任何地方。 - undefined

-17
确保 RichTextBox 上的 DetectUrls 属性设置为 true。然后可以附加链接单击事件的事件处理程序,执行您所需的操作。
<RichTextBox DetectUrls="True" />

可能是重复的帖子。感谢Sam Meldrum在这个帖子中的贡献。

如果您想进行更深入的分析,可以尝试本文


7
你错了,DetectUrls 属性与 WinForms 的 RichTextBox 相关,而与 WPF 的 RichTextBox 无关。 - white.zaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接