Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF文本中的可点击链接_C#_Wpf_Winforms_Textbox - Fatal编程技术网

C# WPF文本中的可点击链接

C# WPF文本中的可点击链接,c#,wpf,winforms,textbox,C#,Wpf,Winforms,Textbox,我有一个文本框,显示一些消息 <TextBox VerticalAlignment="Center" HorizontalAlignment="Left" TextWrapping="Wrap" FontFamily="{StaticResource LatoRegular}" Foreground="Black" FontSize="{StaticResource Font

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

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

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

我的处境: 我的信息可能包含其他文本,甚至不止一个链接。例如“嗨,请访问google.com了解更多信息”。我希望google.com被识别为一个链接,并且可以点击。

有人知道我怎么做吗


或者除了文本框之外,我还能用什么。。我需要它对后面的消息视而不见。您可以使用文本块而不是文本框,方法如下:

<TextBlock>
        <Hyperlink NavigateUri="{Binding Message}" RequestNavigate="Hyperlink_RequestNavigate">
            <TextBlock Text="{Binding Message}"/>
        </Hyperlink>
</TextBlock>
对于您不知道用户是否会发送链接或文本的需求,这将是基本的实现-

  • 在同一位置有两个控件:

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

    b。上面显示了一个超链接文本块

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


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

    您如何知道发送的消息是链接?是否有任何属性或你必须从消息中猜测?我不知道消息是否包含链接,这取决于用户是否发布链接请检查下面的更新答案。如果消息中只有一个链接,你的方法可以工作,但我的情况是消息可能包含其他文本或甚至超过1个链接。例如“嗨,请访问google.com了解更多信息”。我希望google.com被识别为一个链接,并且可以点击。
    private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    {
        Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
        e.Handled = true;
    }