我需要在wpf超链接上对keydown事件执行一些操作。
我有一个简单的richtextbox,其中有一个超链接。我希望只有当焦点在超链接上时才会触发Keydown事件,即光标在超链接文本上。
这样做不起作用,我找不到任何解释为什么这不起作用。
<Hyperlink KeyDown="Hyperlink_KeyDown">
test
</Hyperlink>
如果你能帮助我,我将非常感激。
感谢。 祝你有美好的一天, Astig。
答案 0 :(得分:1)
它不起作用,因为超链接无法识别为聚焦,您可以在父控件中捕获此事件,例如网格,但在它被捕获之前,您必须单击它。
所以你可能会像这样抓住窗口的keydown事件:
XAML:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Name="MW" KeyDown="MW_KeyDown">
<Grid>
<TextBlock>
<Hyperlink Name="HL1" NavigateUri="http://www.google.com/" RequestNavigate="HL1_RequestNavigate">
Focus it and key down
</Hyperlink>
</TextBlock>
</Grid>
和代码:
private void MW_KeyDown(object sender, KeyEventArgs e)
{
if (HL1.IsMouseOver == true)
HL1_RequestNavigate(HL1,new RequestNavigateEventArgs(HL1.NavigateUri, HL1.Name));
}
private void HL1_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
修改强>
此外,您可以将焦点设置为超链接:
XAML:
<Hyperlink Name="HL1" NavigateUri="http://www.google.com/" RequestNavigate="HL1_RequestNavigate" KeyDown="HL1_KeyDown" MouseEnter="HL1_MouseEnter">
代码:
private void HL1_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
private void HL1_KeyDown(object sender, KeyEventArgs e)
{
HL1_RequestNavigate(HL1, new RequestNavigateEventArgs(HL1.NavigateUri, HL1.Name));
}
private void HL1_MouseEnter(object sender, MouseEventArgs e)
{
HL1.Focus();
}