2011-06-17 14 views
5

Khi tôi điền một ListBox với Dịch vụ RIA, một mục sẽ tự động được chọn. Điều này kích hoạt sự kiện SelectionChanged. Nếu tôi di chuyển vùng chọn lên hoặc xuống bằng các phím mũi tên, sự kiện đó cũng sẽ được kích hoạt.Chọn mục ListBox chỉ trên phím Nhấp hoặc Enter trong Silverlight

Tôi không muốn điều này. Tôi muốn người dùng nhấn enter hoặc nhấp vào mục để nó được chọn. Làm cách nào để tôi thực hiện việc này?

Trả lời

4

Bạn có thể xử lý các sự kiện MouseLeftButtonDownKeyDown 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).