如何将含真实链接的文本格式化为隐藏链接的LINK标签形式?
实现隐藏真实链接的文本显示方案
完全可行,不管是WinForms的RichTextBox还是WPF的相关控件,都能实现“显示LINK标签、隐藏真实链接但保留跳转功能”的效果,具体实现方式如下:
一、WinForms RichTextBox 实现方式
WinForms的RichTextBox支持RTF格式,我们可以通过构造RTF代码,将真实链接嵌入到LINK文本的超链接属性中。
示例RTF代码
将你提供的文本转换为以下RTF格式,加载到RichTextBox后就会显示LINK标签,点击可跳转至对应真实链接:
{\rtf1\ansi\deff0 {\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}} \viewkind4\uc1\pard\f0\fs17 match 1\par {\field{\*\fldinst HYPERLINK "http://www.google.it"}{\fldrslt 1: LINK1}}\par {\field{\*\fldinst HYPERLINK "http://www.example.it"}{\fldrslt 2: LINK2}}\par {\field{\*\fldinst HYPERLINK "http://www.example2.it"}{\fldrslt 3: LINK3}}\par \par match2 15:30\par {\field{\*\fldinst HYPERLINK "http://www.google.it"}{\fldrslt 1: LINK1}}\par {\field{\*\fldinst HYPERLINK "http://www.example.it"}{\fldrslt 2: LINK2}}\par {\field{\*\fldinst HYPERLINK "http://www.example2.it"}{\fldrslt 3: LINK3}}\par }
C# 加载代码示例
// 假设richTextBox1是你的WinForms RichTextBox控件 string rtfContent = @"{\rtf1\ansi\deff0 {\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}} \viewkind4\uc1\pard\f0\fs17 match 1\par {\field{\*\fldinst HYPERLINK ""http://www.google.it""}{\fldrslt 1: LINK1}}\par {\field{\*\fldinst HYPERLINK ""http://www.example.it""}{\fldrslt 2: LINK2}}\par {\field{\*\fldinst HYPERLINK ""http://www.example2.it""}{\fldrslt 3: LINK3}}\par \par match2 15:30\par {\field{\*\fldinst HYPERLINK ""http://www.google.it""}{\fldrslt 1: LINK1}}\par {\field{\*\fldinst HYPERLINK ""http://www.example.it""}{\fldrslt 2: LINK2}}\par {\field{\*\fldinst HYPERLINK ""http://www.example2.it""}{\fldrslt 3: LINK3}}\par }"; richTextBox1.Rtf = rtfContent;
二、WPF 控件实现方式
如果使用WPF,可选控件更多,实现更灵活:
- RichTextBox:同样支持RTF,或者直接通过FlowDocument构造超链接元素
- TextBlock:直接嵌套Hyperlink元素,代码更简洁
TextBlock 示例XAML
<TextBlock FontFamily="Microsoft Sans Serif" FontSize="14"> match 1 <LineBreak/> <Hyperlink NavigateUri="http://www.google.it"> 1: LINK1</Hyperlink> <LineBreak/> <Hyperlink NavigateUri="http://www.example.it"> 2: LINK2</Hyperlink> <LineBreak/> <Hyperlink NavigateUri="http://www.example2.it"> 3: LINK3</Hyperlink> <LineBreak/><LineBreak/> match2 15:30 <LineBreak/> <Hyperlink NavigateUri="http://www.google.it"> 1: LINK1</Hyperlink> <LineBreak/> <Hyperlink NavigateUri="http://www.example.it"> 2: LINK2</Hyperlink> <LineBreak/> <Hyperlink NavigateUri="http://www.example2.it"> 3: LINK3</Hyperlink> </TextBlock>
内容的提问来源于stack exchange,提问作者878757
相关产品推荐
相关产品推荐

