在WPF中创建超链接文本,同样有两种方式,一种是在XAML文件中,使用标记语言创建,这是最简单也是最常用的创建方式;另外一种是使用代码创建,这种方式比较少见,而且比较复杂,但是对于需要动态创建或者需要根据不同的条件显示不同的超链接文本的情况下,是必须的。
下边就主要讲一下这两种创建方式
1.使用标记语言创建(XAML)
<TextBlock >
<Hyperlink FontSize="20" MouseEnter="Hyperlink_MouseEnter"
Foreground="#FF20D18D" MouseLeave="Hyperlink_MouseLeave" Click="Hyperlink_Click">
<Textblock Text = "this is a hyperlink"></Textblock>
</Hyperlink>
</TextBlock>
默认情况下,鼠标未选中超链接文本时,文字颜色为蓝色,鼠标选中时,文字颜色为红色,可以通过触发MouseLeave和MouseEnter事件,通过修改Foreground的颜色来进行自定义
本文修改了超链接文本无法动态绑定的问题,超链接文本一般是要求显示写出,但是很多情况超链接文本可能需要上下文的内容决定,或者绑定一个对象的属性等,这时候可以将超链接文本保存至一个textblock标签中,通过绑定textblock就可以实现动态改变超链接的文本值。
2.使用代码实现
private void addHyperLinkLineHeader(string lineName)
{
TextBlock LineName = new TextBlock();//定义textblock标签
LineName.Margin = new System.Windows.Thickness(100, 50, 0, 0);
LineName.Foreground = System.Windows.Media.Brushes.White;
LineName.FontSize = 14;
Run run1 = new Run(lineName);//定义流元素
Hyperlink link = new Hyperlink();//定义超链接文本标签
link.Foreground = System.Windows.Media.Brushes.White;//设置超链接文本的字体颜色
link.Inlines.Add(run1);//将流元素添加到超链接文本中
LineName.Inlines.Add(link);//将超链接文本添加到流元素中
link.MouseEnter += new MouseEventHandler(link_MouseEnter);//为超链接文本添加鼠标进入触发事件
link.MouseLeave += new MouseEventHandler(link_MouseLeave);//为超链接文本添加鼠标离开触发时间
link.Click += new RoutedEventHandler(link_Click);//为超链接文本添加鼠标单击事件
linesStackP.Children.Add(LineName);
}
对应的MouseEnter与MouseLeave事件处理程序,以及单击事件:
private void link_MouseEnter(object sender, MouseEventArgs e)
{
Hyperlink link = (Hyperlink)e.OriginalSource;
link.Foreground = System.Windows.Media.Brushes.Red;
}
private void link_MouseLeave(object sender, MouseEventArgs e)
{
Hyperlink link = (Hyperlink)e.OriginalSource;
link.Foreground = System.Windows.Media.Brushes.White;
}
private void link_Click(object sender, RoutedEventArgs e)
{
Hyperlink link = (Hyperlink)e.OriginalSource;
InlineCollection ilineName = link.Inlines;
Run line = (Run)ilineName.FirstInline;
string str = line.Text;
}
有关流文件,参考<a target=_blank href="https://technet.microsoft.com/zh-cn/office/aa970909.aspx">https://technet.microsoft.com/zh-cn/office/aa970909.aspx</a>