[英]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.