TextBlock中的C#超链接:当我点击它时没有任何反应

时间:2012-10-05 08:48:14

标签: 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);

链接显示正确。

当我将鼠标移到它上面时,链接变为红色。

问题:当我点击它时,没有任何反应。

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

4 个答案:

答案 0 :(得分:25)

您需要处理超链接的RequestNavigate事件。这是一个快速的方法:

link.RequestNavigate += (sender, e) =>
{
    System.Diagnostics.Process.Start(e.Uri.ToString());
};

答案 1 :(得分:6)

您是否正在处理'Hyperlink.RequestNavigate'事件?当用户在WPF窗口中单击超链接时,它不会自动打开具有其NavigateUri属性中指定的URI的浏览器。

在您的代码隐藏中,您可以执行以下操作:

link.RequestNavigate += LinkOnRequestNavigate;

private void LinkOnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
    System.Diagnostics.Process.Start(e.Uri.ToString());
}

答案 2 :(得分:1)

对于 .Net Core 中的用户,您执行此操作的方式已经改变。基于此 answerthis

link.RequestNavigate += (sender, e) =>
{
    var url = e.Uri.ToString();
    Process.Start(new ProcessStartInfo(url)
    { 
        UseShellExecute = true 
    });
};

答案 3 :(得分:0)

您可以在 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 属性都指向您要启动的内容,但您始终可以让处理程序处理边缘情况。