2009-07-24 17 views
17

Cách tốt nhất để nắm bắt khóa trả về trong một PasswordBox là gì? (WPF/XAML)Cách tốt nhất để nắm bắt khóa trả về trong một PasswordBox là gì? (WPF/XAML)

Tôi có một trường TextBox và trường PasswordBox trên biểu mẫu đăng nhập của tôi (cho mục nhập tên người dùng và mật khẩu). Tôi cũng có một nút đăng nhập gọi phương thức thực hiện quá trình xác thực đăng nhập.

tôi cần phải thực hiện phím Return phản ứng theo cùng một cách trong PasswordBox, do đó người dùng có thể có tùy chọn nhập tên tài khoản và mật khẩu của họ và chỉ cần nhấn Return để đăng nhập.

Có ai biết làm thế nào đây là được thực hiện trong WPF? Bất kỳ trợ giúp được đánh giá cao.

Trả lời

47

Có một cơ chế dễ dàng hơn để kích hoạt mã của nút. WPF Button lớp cung cấp một tài sản gọi là IsDefault. Khi được đặt thành true, nếu bạn nhấn return trong khi một số đối tượng trong cửa sổ có tiêu điểm, mã của sự kiện nhấp của nút sẽ được kích hoạt tự động. Cơ chế này hoạt động như một sự quyến rũ với hộp mật khẩu.

+0

Thậm chí tốt hơn! Cảm ơn! – Giffyguy

+0

Cảm ơn Chính xác những gì tôi cần! – rikket

+4

Chỉ cần lưu ý, các thuộc tính IsDefault, IsDefaulted và IsCancel không được triển khai trên lớp nút trong WinRT. Thất vọng. –

1

Bạn có thể thử sử dụng RoutedCommand.

Bạn có thể đặt nó trên thuộc tính Lệnh của Nút.
Bạn cũng có thể thêm KeyGesture vào InputBindings của biểu mẫu đăng nhập để liên kết phím Enter để kích hoạt RoutedCommand của bạn.

Sau đó thêm một CommandBinding trong CommandBindings của biểu mẫu đăng nhập của bạn để ràng buộc RoutedCommand để xử lý thực thi trong mã của bạn và thực hiện hoặc kích hoạt quá trình xác thực đăng nhập của bạn.

+0

Âm thanh mạnh mẽ! Nhưng đó thực sự là cách đơn giản nhất để làm điều này, phải không? Nếu vậy - tôi sẽ có một tai nghe cho Microsoft, hãy nói cho ya ... – Giffyguy

+0

Phụ thuộc. Bằng cách này bạn chỉ có một trình xử lý trong mã của bạn thay vì hai (trên cho nút, một cho hộp mật khẩu). Nó linh hoạt hơn và không phức tạp như âm thanh. Chỉ có hai bước phụ mà bạn phải thực hiện một lần, bao giờ: xác định RoutedCommand và thêm CommandBinding. KeyGesture tương tự như việc thêm người tổ chức sự kiện vào hộp mật khẩu, cho nút bạn đặt Lệnh thay vì trình xử lý Nhấp chuột. Nhưng bạn có một điểm, có thể là quá mức cần thiết cho một biểu mẫu đăng nhập đơn giản. :) – Bubblewrap

4

Bạn có thể xử lý các sự kiện KeyDown trên PasswordBox (và TextBox nếu muốn) và sau đó sử dụng bộ xử lý sự kiện sau đây -

private void OnKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key != Key.Return && e.Key != Key.Enter) 
     return; 
    e.Handled = true; 
    HandleEnter(); 
} 
+0

Điều này sẽ hoạt động hoàn hảo, tôi chỉ gặp khó khăn trong việc tìm kiếm các sự kiện có thể sử dụng cho các điều khiển WPF khác nhau ... Cảm ơn! – Giffyguy