游戏攻略

实现WPF消息对话框中文字高亮和链接跳转的方法

栏目:游戏攻略 日期: 作者:游戏资讯

动手写一个简单的消息对话框,可以满足常见应用场景的需求。然而,对于需要部分关键字高亮或内容具有交互性的场景,现有的消息对话框无法满足。本文将介绍如何在WPF中实现消息对话框中局部文字内容高亮或者支持跳转。

使用HtmlTextBlock

在WPF中,可以使用 <Run> 或者 TextEffect 实现文字中部分关键字高亮,但无法同时满足部分内容支持链接跳转功能。为解决这一问题,可以采用支持有限HTML标签的WPF控件 HtmlTextBlock 。该控件可以支持 <b> , <u> , <i> , <a> , <br> , <font> 等标签,并新增了一个依赖属性 HtmlProperty ,接收需要展现的html内容。使用时需要把html内容字符串中的 <> [] 代替。

Content="[font color=red]红色[/font]文字高亮";
<toolkit:HtmlTextBlock Margin="0,0,0,0" FontSize="18"
					   HorizontalAlignment="Center" VerticalAlignment="Center" 
					   Html="{Binding Content}" />

需要注意的是,用 Html 绑定的内容中如果包含成对的英文方括号 [] 都会被当做标签处理,无论是否是上述支持的六种标签,都不会显示出来。中文方括号 【】 或者单个的英文方括号则会作为内容直接显示出来。如果用 Text 绑定内容则全部当成内容显示出来。

修改消息对话框

在原有消息对话框中,内容区域是使用可选中文本的控件 SelectableTextBlock 显示内容。只需将 SelectableTextBlock 替换为 HtmlTextBlock ,并用依赖属性 HtmlProperty 绑定内容即可。调用的时候只需把内容改为带标签的内容即可。例如:

 ShowAlertDialog(AlertDialogMode.Normal, AlertDialogType.Info, "打开[a href=https://www.chinadaily.com.cn/]中国日报[/a]网站", yesbuttonText: "确定", nobuttonText: "取消", parent: this);

然而,在使用 <a> 标签实现链接跳转时并没有用浏览器打开指定页面。需要对代码稍作修改,使得 Hyperlink 能够导航到 NavigateUri 属性的值。

if (currentState.HyperLink != null && currentState.HyperLink.Length > 0)
{
	Hyperlink link = new Hyperlink(retVal);
	try
	{
		link.Click += new RoutedEventHandler((s, e) =>
		{
			Process.Start(new ProcessStartInfo((s as Hyperlink).NavigateUri.AbsoluteUri));
			e.Handled = true;
		});
	}
	catch(Exception ex)
	{
		.....
	}
	retVal = link;
}

关键词:

相关资讯