Bạn có thể xử lý các sự kiện MouseLeftButtonDown
và KeyDown
cho số ListBox
. Đối với sự kiện KeyDown
, bạn sẽ cần phải kiểm tra EventArgs
để xác định xem phím Enter đã được nhấn (trái ngược với bất kỳ phím nào khác).
Những sự kiện này có thể kích hoạt ngay cả khi một mục không được chọn (ví dụ: nếu người dùng nhấp vào bên trong ListBox
nhưng không vượt quá mục thực tế), vì vậy trong trình xử lý sự kiện của bạn, bạn nên kiểm tra điều này.
xử lý sự kiện của bạn có thể trông giống như thế này:
public void MyListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ItemSelected();
}
public void MyListBox_KeyDown(object sender, KeyEventArgs e)
{
if ((e.Key & Key.Enter) == Key.Enter)
{
ItemSelected();
}
}
public void ItemSelected()
{
if (MyListBox.SelectedItem != null)
{
// Handle item selection here
}
}
Đây là ra khỏi đỉnh đầu của tôi, vì vậy bạn có thể cần phải tinh chỉnh những hơi để có được chúng để làm việc hoàn toàn đúng. Hy vọng rằng bạn thấy ý tưởng chung mặc dù.
Một cách khác để làm điều đó sẽ chỉ đơn giản là loại bỏ các handler SelectionChanged
sự kiện khi populating ListBox
với mục (sử dụng cú pháp "-=
"), sau đó tái gắn nó một lần hoạt động này hoàn tất.
Tôi khuyên bạn nên thực hiện theo cách này (vì bạn lo ngại về sự kiện kích hoạt khi danh sách được điền). Nó sẽ không ngăn người dùng lựa chọn các mục bằng cách sử dụng phím mũi tên Lên và Xuống, trừ khi bạn có lý do thực sự tốt để làm như vậy bạn đang làm mọi thứ bất tiện không cần thiết (người dùng không muốn bị giới hạn tùy ý làm những việc nên làm việc).