当我使用 RIA Services 填充 ListBox 时,会自动选择一个项目,从而触发 SelectionChanged 事件。如果我使用箭头键向上或向下移动选择,则事件也会被触发。
我不想这样,我希望用户按回车键或点击项目才会选中它。我该如何实现这一点?
我不想这样,我希望用户按回车键或点击项目才会选中它。我该如何实现这一点?
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
事件处理程序(使用 "-=
" 语法),然后在完成此操作后重新附加它。我建议您以这种方式执行(因为您担心列表被填充时事件会触发)。这不会阻止用户使用向上和向下箭头键选择项目,但除非您有一个非常好的理由这样做,否则您会使事情变得不必要的麻烦(用户不想被任意限制不能正常工作)。