在Silverlight中,仅在单击或按下Enter键时选择ListBox项目

5
当我使用 RIA Services 填充 ListBox 时,会自动选择一个项目,从而触发 SelectionChanged 事件。如果我使用箭头键向上或向下移动选择,则事件也会被触发。
我不想这样,我希望用户按回车键或点击项目才会选中它。我该如何实现这一点?
1个回答

5
您可以处理 ListBoxMouseLeftButtonDownKeyDown 事件。对于 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 事件处理程序(使用 "-=" 语法),然后在完成此操作后重新附加它。我建议您以这种方式执行(因为您担心列表被填充时事件会触发)。这不会阻止用户使用向上和向下箭头键选择项目,但除非您有一个非常好的理由这样做,否则您会使事情变得不必要的麻烦(用户不想被任意限制不能正常工作)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接