當我使用RIA Services填充ListBox
時,會自動選擇一個項目。這會觸發SelectionChanged
事件。如果我用箭頭鍵向上或向下移動選擇,事件也會被觸發。僅在Silverlight中的Click或Enter鍵上選擇ListBox項目
我不想要這個。我希望用戶按回車或點擊要選擇的項目。我該如何做到這一點?
當我使用RIA Services填充ListBox
時,會自動選擇一個項目。這會觸發SelectionChanged
事件。如果我用箭頭鍵向上或向下移動選擇,事件也會被觸發。僅在Silverlight中的Click或Enter鍵上選擇ListBox項目
我不想要這個。我希望用戶按回車或點擊要選擇的項目。我該如何做到這一點?
您可以處理ListBox
的MouseLeftButtonDown
和KeyDown
事件。對於KeyDown
事件,您需要檢查EventArgs
以確定是否按下了Enter鍵(而不是其他任何鍵)。
即使未選擇某個項目(例如,如果用戶在ListBox
內部點擊但未在實際項目上點擊),這些事件也會觸發,因此在您的事件處理程序中您應該檢查此事件。
你的事件處理程序可能是這個樣子:
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
}
}
這些都是從我的頭頂,所以你可能需要稍微調整這些讓他們的工作完全正確。希望你看到一般的想法。
另一種方式來做到這將是填充ListBox
與項目(使用「-=
」語法)時,只需刪除SelectionChanged
事件處理程序,然後重新裝一次這個操作完成。
我建議這樣做(因爲你擔心事件發生時,列表填充)。它不會阻止用戶使用向上和向下箭頭鍵選擇項目,但除非你有這樣一個真正充分的理由,否則你會使事情變得不必要的不方便(用戶不希望被任意限制,應該工作)。