You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF RichTextBox中插入可点击UNC路径?求LinkClicked事件替代方案

在WPF RichTextBox中实现可点击UNC路径及替代WinForm LinkClicked事件

一、插入可点击的UNC路径

WPF的RichTextBox基于FlowDocument,需通过创建Hyperlink元素实现可点击路径,具体操作如下:

  • 修正UNC路径的Uri格式:本地路径要转为file:///C:/Test(注意三个斜杠),网络UNC路径如\\server\share直接转为file://server/share即可
  • 创建Hyperlink实例,设置NavigateUri为格式化后的Uri,同时指定显示文本
  • 将Hyperlink添加到Paragraph中,再把Paragraph加入RichTextBox的FlowDocument里

代码示例:

// 本地路径处理
string localPath = @"C:\Test";
Uri localUri = new Uri($"file:///{localPath.Replace(@"\", "/")}");

// 网络UNC路径处理
string uncPath = @"\\ServerName\SharedFolder";
Uri uncUri = new Uri(uncPath);

// 创建可点击链接
Hyperlink localLink = new Hyperlink(new Run(localPath))
{
    NavigateUri = localUri,
    Foreground = Brushes.Blue,
    TextDecorations = TextDecorations.Underline
};

// 添加到RichTextBox
var paragraph = new Paragraph();
paragraph.Inlines.Add(localLink);
richTextBox.Document.Blocks.Add(paragraph);

二、替代WinForm的LinkClicked事件

WPF中没有直接对应的LinkClicked事件,需借助Hyperlink的RequestNavigate事件处理点击逻辑:

  • 给每个创建的Hyperlink绑定RequestNavigate事件
  • 在事件处理方法中,通过Process.Start打开目标路径,同时做好异常捕获

代码示例:

// 绑定事件
localLink.RequestNavigate += Hyperlink_RequestNavigate;

// 事件处理逻辑
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    try
    {
        System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(e.Uri.AbsoluteUri));
        e.Handled = true;
    }
    catch (Exception ex)
    {
        MessageBox.Show($"无法打开路径:{ex.Message}");
    }
}

额外提示

  • 如果需要批量识别文本中的UNC路径并自动转为可点击链接,可以通过正则表达式匹配路径格式,再替换对应位置的Run元素为Hyperlink
  • 涉及网络共享路径时,需确保程序运行账户有访问该共享的权限

内容的提问来源于stack exchange,提问作者user22467130

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:16:11