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 或某些文本 -
的要求
在同一个地方有两个控件:
一个。一个简单的文本块,用于显示不是 hyperlink.
的文本
b。上面显示的一个 hyperlink 文本块。
为每个控件的可见性创建一个标志,在用户发送消息时验证消息并根据消息是 link 还是纯文本设置标志。
或
您还可以为文本块定义一个数据模板,该模板将根据您需要设置的一些标志更改为超文本块link或普通文本块,您需要在验证用户发送的消息是它是一个 hyperlink 或纯文本。
我有一个显示一些消息的文本框...
<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 或某些文本 -
的要求在同一个地方有两个控件:
一个。一个简单的文本块,用于显示不是 hyperlink.
的文本b。上面显示的一个 hyperlink 文本块。
为每个控件的可见性创建一个标志,在用户发送消息时验证消息并根据消息是 link 还是纯文本设置标志。
或
您还可以为文本块定义一个数据模板,该模板将根据您需要设置的一些标志更改为超文本块link或普通文本块,您需要在验证用户发送的消息是它是一个 hyperlink 或纯文本。