wpf超链接中的KeyDown事件

时间:2011-03-16 10:38:41

标签: wpf xaml hyperlink keydown

我需要在wpf超链接上对keydown事件执行一些操作。

我有一个简单的richtextbox,其中有一个超链接。我希望只有当焦点在超链接上时才会触发Keydown事件,即光标在超链接文本上。

这样做不起作用,我找不到任何解释为什么这不起作用。

<Hyperlink KeyDown="Hyperlink_KeyDown">
   test
</Hyperlink>

如果你能帮助我,我将非常感激。

感谢。 祝你有美好的一天, Astig。

1 个答案:

答案 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();
    }