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

C# WinForms中RichTextBox嵌入可点击链接的实现问题

C# WinForm 实现可点击链接带样式文本列表的问题解决

需求

要做一个支持网页/本地文件可点击链接的列表,同时需要保留字体加粗、项目符号这类文本样式。

踩坑过程

  1. RichTextBox 尝试

    • 用控件richTextBoxRessources手动生成RTF代码添加链接,链接显示正常,但LinkClicked事件完全没触发
    • 试过第三方NuGet扩展控件,同样无效
    • 用Word导出RTF代码导入,仅第一个链接能点击,其余全部失效
  2. WebView2 初步尝试

    • 网页链接能正常响应点击,但本地文件链接无法触发打开操作

最终解决方案

放弃RichTextBox,基于WebView2生成内部HTML页面实现需求,兼顾样式和链接交互:

核心实现思路

  1. 用HTML语法构建带样式的列表(<ul>做项目符号,<strong>实现加粗)
  2. 给链接绑定JS点击事件,通过WebView2的宿主对象调用C#方法处理链接打开逻辑
  3. 区分网页和本地文件,统一用Process.Start调用系统默认程序打开

代码示例

C# 端(注册交互对象)

using System.Diagnostics;
using System.Windows.Forms;

public class LinkHandler
{
    public void OpenLink(string targetPath)
    {
        if (Uri.TryCreate(targetPath, UriKind.Absolute, out var uri))
        {
            // 调用系统默认程序打开链接/文件
            Process.Start(new ProcessStartInfo(uri.ToString()) { UseShellExecute = true });
        }
    }
}

private async void Form_Load(object sender, EventArgs e)
{
    // 初始化WebView2
    await webView21.EnsureCoreWebView2Async();
    // 将C#对象暴露给JS
    webView21.CoreWebView2.AddHostObjectToScript("linkHandler", new LinkHandler());

    // 生成带样式的HTML内容
    string htmlContent = @"
    <style>
        body { font-family: Microsoft YaHei; font-size: 14px; }
        li { margin: 8px 0; }
    </style>
    <ul>
        <li><strong>在线文档:</strong><a href='javascript:void(0)' onclick='window.chrome.webview.hostObjects.linkHandler.OpenLink(""https://example.com/docs"")'>产品手册</a></li>
        <li><strong>本地工具:</strong><a href='javascript:void(0)' onclick='window.chrome.webview.hostObjects.linkHandler.OpenLink(""C:\\Tools\\demo.exe"")'>调试工具</a></li>
    </ul>";

    webView21.NavigateToString(htmlContent);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:43:18