仅在Silverlight中的Click或Enter键上选择ListBox项

时间:2011-06-17 15:18:46

标签: silverlight listbox wcf-ria-services listboxitem

当我使用RIA服务填充ListBox时,会自动选择一个项目。这会触发SelectionChanged事件。如果我使用箭头键向上或向下移动选择,则事件也会被触发。

我不想要这个。我希望用户按回车或单击要选择的项目。我该如何做到这一点?

1 个答案:

答案 0 :(得分:4)

您可以处理ListBox的{​​{3}}和MouseLeftButtonDown个事件。对于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
   } 
}

这些不在我的脑海中,因此您可能需要稍微调整这些以使它们正常工作。希望你能看到一般的想法。


另一种方法是在使用项目填充SelectionChanged时使用ListBox事件处理程序(使用“-=”语法),然后重新附加一次此操作已完成。

我建议这样做(因为你担心填充列表时会触发事件)。它不会阻止用户使用向上和向下箭头键选择项目,但除非你有充分的理由这样做,否则你会使事情变得不必要(用户不希望被任意限制做那些事情,应该工作)。