WPF 文本中的可点击链接

WPF Clickable Links in Text

我有一个显示一些消息的文本框...

        <TextBox VerticalAlignment="Center"
          HorizontalAlignment="Left"
          TextWrapping="Wrap"
          FontFamily="{StaticResource LatoRegular}"
          Foreground="Black"
          FontSize="{StaticResource FontSizeRegular}"
          Text="{Binding Message}"
           Background="Transparent"
           BorderThickness="0"
           Padding="0"
           Margin="0"
           IsReadOnly="True"
                                       />

如果用户在消息中发送 link,我希望能够检测到并单击它并在浏览器上打开页面。

我的情况: 我的消息可能包含其他文本,甚至超过 1 link。例如 "Hi Please visit google.com for more info"。我希望 google.com 被识别为 link 并且可以点击。

有人知道我该怎么做吗?

否则除了文本框我还能用什么..我需要它来忽略后面的消息

您可以通过以下方式使用 TextBlock 代替 TextBox:

<TextBlock>
        <Hyperlink NavigateUri="{Binding Message}" RequestNavigate="Hyperlink_RequestNavigate">
            <TextBlock Text="{Binding Message}"/>
        </Hyperlink>
</TextBlock>

Hyperlink_RequestNavigate:将是您的事件处理程序,您将在其中通过 Process.Start

打开浏览器
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
    e.Handled = true;
}

这将是基本实现,适用于您不知道用户是否会发送 link 或某些文本 -

的要求
  1. 在同一个地方有两个控件:

    一个。一个简单的文本块,用于显示不是 hyperlink.

    的文本

    b。上面显示的一个 hyperlink 文本块。

  2. 为每个控件的可见性创建一个标志,在用户发送消息时验证消息并根据消息是 link 还是纯文本设置标志。

您还可以为文本块定义一个数据模板,该模板将根据您需要设置的一些标志更改为超文本块link或普通文本块,您需要在验证用户发送的消息是它是一个 hyperlink 或纯文本。