C# 文本块中的超链接:当我点击它时,什么都不会发生
在我的C#独立应用程序中,我想让用户点击一个链接,启动他们最喜欢的浏览器C# 文本块中的超链接:当我点击它时,什么都不会发生,c#,wpf,hyperlink,textblock,navigateuri,C#,Wpf,Hyperlink,Textblock,Navigateuri,在我的C#独立应用程序中,我想让用户点击一个链接,启动他们最喜欢的浏览器 System.Windows.Controls.TextBlock text = new TextBlock(); Run run = new Run("Link Text"); Hyperlink link = new Hyperlink(run); link.NavigateUri = new Uri("http://w3.org"); text.Inlines.Add(link); 链接显示正确 当我在上面移动鼠
System.Windows.Controls.TextBlock text = new TextBlock();
Run run = new Run("Link Text");
Hyperlink link = new Hyperlink(run);
link.NavigateUri = new Uri("http://w3.org");
text.Inlines.Add(link);
链接显示正确
当我在上面移动鼠标时,链接变为红色
问题:当我点击它时,什么也没发生
我忘了什么吗?我需要实现某种方法才能真正打开链接吗?您需要处理超链接的
RequestNavigate
事件。这里有一个快速的方法:
link.RequestNavigate += (sender, e) =>
{
System.Diagnostics.Process.Start(e.Uri.ToString());
};
您正在处理“Hyperlink.RequestNavigate”事件吗?当用户单击WPF窗口中的超链接时,它不会自动打开具有其NavigateUri属性中指定URI的浏览器 在代码隐藏中,您可以执行以下操作:
link.RequestNavigate += LinkOnRequestNavigate;
private void LinkOnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(e.Uri.ToString());
}
您可以在App.xaml.cs中创建全局超链接处理程序
protected override void OnStartup(StartupEventArgs e) {
EventManager.RegisterClassHandler(
typeof(System.Windows.Documents.Hyperlink),
System.Windows.Documents.Hyperlink.RequestNavigateEvent,
new System.Windows.Navigation.RequestNavigateEventHandler(
(sender, en) => System.Diagnostics.Process.Start(en.Uri.ToString())
)
);
base.OnStartup(e);
}
这假设所有NavigateUri属性都引用了您想要启动的内容,但您始终可以让处理程序处理边缘情况。对于.Net Core中的那些情况,您执行此操作的方式已经改变。基于此和
link.RequestNavigate+=(发件人,e)=>
{
var url=e.Uri.ToString();
Process.Start(新的ProcessStartInfo(url)
{
UseShellExecute=true
});
};
WPF超链接几乎毫无用处。我希望它使用xaml中设置的URL启动URL,否则为什么不在视图模型中使用标签和按钮呢。