簡體   English   中英

從Winforms TextBox KeyDown處理程序啟動時,WPF窗口加載時觸發默認按鈕

[英]Default button triggered on WPF Window load when launched from Winforms TextBox KeyDown handler

我正在Winforms TextBox的KeyDown處理程序中啟動WPF窗口(使用ShowDialog)。 WPF窗口具有一個IsDefault = true的按鈕。 在TextBox上按Enter之后,WPF AccessKey機制顯然會在窗口加載后將其拾取並觸發默認按鈕。

從WPF TextBox的KeyDown處理程序啟動窗口時,不存在此問題。

尋找一種解決方法,以防止WPF窗口接收Winforms文本框中正在處理的按鍵。

這里是一些示例代碼,說明了此問題:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        var window = new System.Windows.Window();
        var button = new System.Windows.Controls.Button
        {
            IsDefault = true,
            Content = "OK",
        };
        button.Click += (s, args) => window.Close();
        window.Content = button;

        // window loads then immediately closes due to the default button being triggered
        window.ShowDialog();
    }
}

這樣做可能是更好的方法,但是要改變

window.ShowDialog(); 

Dispatcher.CurrentDispatcher.Invoke(new Action(() => window.ShowDialog()));

給了我想要的行為。

我目前的解決方案是在按鈕的命令中放置一個保護條件,該保護條件僅在內容已呈現時(由ContentRendered事件處理程序中設置的標志確定)才允許執行其余命令。 在我的特定情況下(替換消息框),它可以很好地工作,並且可以在一個地方進行本地化,但如果有的話,仍在尋找更好的解決方案。

更新:有點麻煩的解決方案(在Dispatcher.Invoke中顯示對話框)更加干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM