![](/img/trans.png)
[英]Excel CustomTaskPane with WebBrowser control - keyboard/focus issues
[英]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.