繁体   English   中英

WebBrowser获得焦点后,重新获取键盘事件

[英]Get Keyboard events back, after WebBrowser gets focus

在某些情况下,我想使用WFP WebBrowser ,但是当用户按下按钮时,会发生某些事情。 但是,在WebBrowser获得焦点之后,某些键盘和鼠标事件将不再在我的应用中触发。

重现:创建一个新项目,设置XAML:

<Window x:Class="ProblemKeyboard.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">
    <Grid>
        <WebBrowser x:Name="browser" Height="177" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="479" />
    </Grid>
</Window>

并让代码隐藏重写OnKeyDown()事件。

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
        browser.Navigate("http://www.google.com");
        //The above line causes browser to focus 
        //and as a consequence the OnKeyDown() handler 
        //doesn't get called again
    }

    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Enter) MessageBox.Show("Yey!");
        base.OnKeyDown(e);
    }
}

好的,可以理解的是,用户可能想输入他的Google查询。 但是在某个时候我想重新获得控制权。 为此,我设计了一个按钮。 当您单击此按钮时,我希望键盘控制返回到WPF应用程序。 但是无论按钮做什么,我都无法再次触发OnKeyDown()

我的特殊限制允许此时销毁WebBrowser 我尝试清除其父容器,尝试调用Dispose()和垃圾收集器。 尝试了Focus()来研究具有该功能的东西。 似乎什么也无法控制。

我宁愿避免使用会创建新Window()或类似效果的解决方案。

编辑

我发现放一个TextBox并使它成为焦点可以使我重新聚焦! 但是,我的窗口中没有文本框,仅为咯咯地笑而添加一个文本框充其量似乎是违反直觉的。

编辑2

当前的临时解决方案放置了一个不Visibility.Hidden TextBox (嗯,有点,它只是0乘0, Visibility.Hidden无法正常工作) TextBox启用它,对其进行聚焦并禁用它。 如果不先禁用它,则某些键由TextBox处理,而不是冒泡到KeyDown()

是的,仅Enter键可复制,并且解决方法是将OnKeyUp()用于Enter Key。

    protected override void OnKeyUp(KeyEventArgs e)
    {
        if (e.Key == Key.Enter) MessageBox.Show("Hi");
        base.OnKeyUp(e);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM