如何在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
相关产品推荐
相关产品推荐

