2010-11-16 61 views
46

當您按在HTML form中的任意位置輸入時,它會觸發其action,這相當於按下了submit按鈕。 如何製作窗口,當我按輸入任何地方都會觸發事件?如何在WPF中創建提交按鈕?

+0

在WPF中有一個關鍵的預覽屬性嗎?如果是這樣,將其設置爲true會將所有按鍵直接發送到表單,並且您可以使用按鍵事件來完成。 – 2010-11-16 13:17:22

回答

91

設置IsDefault財產按鈕爲true,以使輸入鍵即可激活按鈕的動作。還有IsCancel屬性爲Escape鍵執行相同的操作。

+1

這是我在下面的答案中的第一個建議,但後來我發現XMLforDummies沒有說他/她在表單上有一個「確定」或「提交」按鈕,所以我編輯了我的答案。這個解決方案中唯一可能遇到的問題是,如果「確定」/「提交」按鈕以外的其他按鈕具有焦點,則按下回車鍵只會點擊焦點按鈕,而不會觸發另一個事件,即可能是你期望的,但只是想提出這一點。 – ihatemash 2010-11-16 15:57:52

+1

我認爲這種行爲是故意的。例如,如果該按鈕打開了一個模式對話框,並通過點擊回車鍵觸發提交,則不會希望這兩個事件觸發。 – 2010-11-16 16:25:08

6

分配PreviewKeyDown事件在XAML窗口然後檢查KeyEventArgs在代碼隱藏,以確定用戶按下回車關鍵

XAML代碼:

<Window 
    [...] 
    PreviewKeyDown="Window_PreviewKeyDown"> 

後面的代碼:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     // Whatever code you want if enter key is pressed goes here 
    } 
} 
+0

對不起,我剛剛意識到你沒有說你在表格上有一個按鈕。在此之前,您必須在表單上有一個按鈕。 – ihatemash 2010-11-16 13:20:26

+1

如果不是,只需將IsHitTestVisible =「true」添加到窗口屬性 – Guy 2010-11-16 13:50:44

+0

警告:此事件將在窗口中的任何控件(即使其他按鈕)上觸發。這通常不是問題,除非您的用戶在表格中圍繞並使用Enter單擊按鈕。 – 2018-01-16 16:42:58

0

我發現DatePicker控件會吞下輸入按鍵,所以默認按鈕不會被點擊。我寫了這個事件處理程序來解決這個問題使用PreviewKeyUp確保DatePicker在單擊默認按鈕之前執行其日期格式代碼。

private void DatePicker_PreviewKeyUp(object sender, KeyEventArgs e) { 
    // event handler to click the default button when you hit enter on DatePicker 
    if (e.Key == Key.Enter) { 
     // https://www.codeproject.com/Tips/739358/WPF-Programmatically-click-the-default-button 
     System.Windows.Input.AccessKeyManager.ProcessKey(null, "\x000D", false); 
    } 
}