簡體   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