2010-11-16 44 views
46

Khi bạn nhấn Nhập vào bất kỳ đâu trong HTML form nó kích hoạt action, tương đương với cách nhấn nút submit. Cách tạo cửa sổ khi tôi nhấn Nhập ở bất kỳ đâu nó sẽ kích hoạt sự kiện?Làm cách nào để thực hiện nút gửi trong WPF?

+0

Có thuộc tính xem trước khóa trong WPF không? Nếu vậy, đặt nó thành true sẽ gửi tất cả các phím bấm trực tiếp đến biểu mẫu và bạn có thể sử dụng sự kiện nhấn phím để thực hiện. –

Trả lời

91

Đặt IsDefault tài sản vào nút true để cho phép các Nhập chìa khóa để kích hoạt hành động của nút đó. Ngoài ra còn có thuộc tính IsCancel thực hiện điều tương tự cho phím Escape.

+1

Đó là gợi ý đầu tiên của tôi trong câu trả lời của tôi dưới đây nhưng sau đó tôi nhận thấy XMLforDummies không nói rằng anh ấy/cô ấy có nút "OK" hoặc "Gửi" trên biểu mẫu để tôi chỉnh sửa câu trả lời của mình. "Vấn đề" duy nhất mà bạn có thể gặp phải với giải pháp này là, nếu nút khác nút "OK"/"Gửi" có tiêu điểm, nhấn phím enter sẽ chỉ nhấp vào nút lấy nét và sẽ không kích hoạt sự kiện khác có lẽ những gì bạn mong đợi nhưng chỉ muốn mang lại điểm đó. – ihatemash

+1

Tôi nghĩ rằng hành vi là cố ý. Ví dụ, nếu nút đó mở ra một hộp thoại phương thức, và bằng cách nhấn phím enter nó kích hoạt trình, bạn sẽ không muốn cả hai sự kiện để kích hoạt. –

6

Gán sự kiện PreviewKeyDown vào cửa sổ trong XAML sau đó kiểm tra KeyEventArgs trong codebehind để xác định nếu người dùng nhấn Nhập then chốt.

mã XAML:

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

Mã đằng sau:

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

Xin lỗi, tôi vừa nhận ra bạn không nói rằng bạn có một nút trên biểu mẫu. Bạn phải có một nút trên biểu mẫu trước khi điều này sẽ hoạt động. – ihatemash

+1

Nếu không, chỉ cần thêm IsHitTestVisible = "true" vào thuộc tính Window – Guy

+0

Cảnh báo: Sự kiện này sẽ kích hoạt trên mọi điều khiển trong Cửa sổ, ngay cả các nút khác. Đó không phải là vấn đề bình thường trừ khi người dùng của bạn Tab xung quanh biểu mẫu và sử dụng nút Enter để nhấp. –

0

Tôi thấy rằng điều khiển DatePicker sẽ nuốt phím số Nhập để nút mặc định không được nhấp. Tôi đã viết xử lý sự kiện này để sửa lỗi đó. Sử dụng PreviewKeyUp để đảm bảo rằng DatePicker thực hiện mã định dạng ngày trước khi nhấp vào nút mặc định.

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); 
    } 
} 
Các vấn đề liên quan