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); 链接显示正确 当我在上面移动鼠

在我的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);
链接显示正确

当我在上面移动鼠标时,链接变为红色

问题:当我点击它时,什么也没发生


我忘了什么吗?我需要实现某种方法才能真正打开链接吗?

您需要处理超链接的
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,否则为什么不在视图模型中使用标签和按钮呢。