C# 在WebBrowser获得焦点后返回键盘事件
我有一种情况,我想使用WFPC# 在WebBrowser获得焦点后返回键盘事件,c#,wpf,xaml,webbrowser-control,C#,Wpf,Xaml,Webbrowser Control,我有一种情况,我想使用WFPWebBrowser,但当用户按下按钮时,发生了一些事情;然而,在WebBrowser获得焦点后,一些键盘和鼠标事件不再在我的应用程序中触发 要复制:创建新项目,请设置XAML: 并让codebehide覆盖OnKeyDown()事件 public partial class MainWindow { public MainWindow() { InitializeComponent(); browser.Navig
WebBrowser
,但当用户按下按钮时,发生了一些事情;然而,在WebBrowser
获得焦点后,一些键盘和鼠标事件不再在我的应用程序中触发
要复制:创建新项目,请设置XAML:
并让codebehide覆盖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);
}
}
好的,可以理解用户可能想要键入他的谷歌查询。但在某个时刻,我想重新获得控制权。为此,我设计了一个按钮。当你点击这个按钮,我希望键盘控制回到WPF应用程序。但无论按钮做什么,我都无法再次启动OnKeyDown()
我的特殊限制允许在此时销毁WebBrowser
。我尝试清除其父容器,尝试调用Dispose()
和垃圾收集器。尝试了Focus()。似乎没有什么东西能恢复控制
我宁愿避免创建新的Window()
或类似的解决方案
编辑
我发现放一个文本框并使其成为焦点可以让我重新聚焦!然而,我的窗口中并没有文本框,添加一个只用于咯咯笑的文本框充其量是违反直觉的
编辑2
当前的临时解决方案放置了一个不可见的(嗯,有点像,它只是0乘0,可见性。隐藏的
不起作用)文本框
-启用、聚焦和禁用它。如果不首先禁用它,一些键将由TextBox
处理,而不是冒泡到KeyDown()
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.Key == Key.Enter) MessageBox.Show("Hi");
base.OnKeyUp(e);
}
是的,它仅可用于Enter
键,修复方法是将OnKeyUp()用于Enter
键
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.Key == Key.Enter) MessageBox.Show("Hi");
base.OnKeyUp(e);
}