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

MAUI:如何为Span添加悬停下划线及已访问链接变色效果

实现悬停下划线与已访问链接颜色修改

因为Span本身没有内置的悬停状态控制,我们可以通过指针进入/离开事件来动态切换下划线,同时通过维护已访问链接集合来修改已点击链接的颜色。

步骤1:维护已访问链接状态

先定义一个静态集合来记录已访问的链接,避免页面重建后丢失状态:

private static readonly HashSet<string> _visitedLinks = new HashSet<string>();

步骤2:修改Span的事件与样式控制

更新原有代码,添加指针事件处理逻辑,动态切换下划线和链接颜色:

var formattedString = new FormattedString();
var link = "http://www.google.com/";
var hyperlinkSpan = new Span { Text = "Click me" };

// 初始化样式:未访问时无下划线,设置默认链接颜色
hyperlinkSpan.TextColor = _visitedLinks.Contains(link) ? Colors.Purple : Colors.Blue;
hyperlinkSpan.TextDecorations = TextDecorations.None;

// 鼠标悬停时添加下划线
hyperlinkSpan.PointerEntered += (s, e) =>
{
    if (s is Span span)
    {
        span.TextDecorations = TextDecorations.Underline;
    }
};

// 鼠标离开时移除下划线
hyperlinkSpan.PointerExited += (s, e) =>
{
    if (s is Span span)
    {
        span.TextDecorations = TextDecorations.None;
    }
};

// 点击后标记为已访问并修改颜色
hyperlinkSpan.GestureRecognizers.Add(new TapGestureRecognizer
{
    Command = new Command(async () =>
    {
        await Launcher.OpenAsync(new Uri(link)).ConfigureAwait(true);
        if (!_visitedLinks.Contains(link))
        {
            _visitedLinks.Add(link);
            hyperlinkSpan.TextColor = Colors.Purple;
        }
    })
});

formattedString.Spans.Add(hyperlinkSpan);

补充说明

  • 如果需要在多个页面复用该逻辑,可以把这段封装成自定义Behavior<Span>,避免重复编写事件代码
  • 颜色、下划线样式可根据需求自行调整,也可将颜色值定义到资源字典中实现全局统一管理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:27:08