【问题标题】:WPF Clickable Links in Text文本中的 WPF 可点击链接
【发布时间】:2018-05-28 08:25:33
【问题描述】:

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

        <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"
                                       />

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

我的情况: 我的消息可能包含其他文本甚至超过 1 个链接。例如“嗨,请访问 google.com 了解更多信息”。我希望 google.com 被识别为链接并可以点击。

有人知道我该怎么做吗?

或者在文本框旁边我还能用什么......我需要它来隐藏背后的信息

【问题讨论】:

  • 你怎么知道发送的消息是一个链接?是否有任何属性或您必须从消息中猜测?
  • 我不知道消息中是否包含链接,不是,由用户发布链接
  • 请检查下面的更新答案。

标签: c# wpf winforms textbox


【解决方案1】:

您可以通过以下方式使用 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;
}

这将是基本实现,对于您不知道用户是否会发送链接或一些文本的要求 -

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

    一个。一个简单的文本块,用于显示不是超链接的文本。

    b.如上所示的一个超链接文本块。

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

或者

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

【讨论】:

  • 如果我在消息中只有一个链接,你的方法可以工作,但我的情况是消息可能包含其他文本甚至超过 1 个链接。例如“嗨,请访问 google.com 了解更多信息”。我希望 google.com 被识别为链接并可以点击。
猜你喜欢
  • 2010-10-26
  • 2021-12-24
  • 2022-07-28
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2020-09-28
  • 2019-07-19
  • 2015-07-31
相关资源
最近更新 更多