【问题标题】:Select ListBox item only on Click or Enter key in Silverlight仅在 Silverlight 中的 Click 或 Enter 键上选择 ListBox 项
【发布时间】:2011-06-17 15:18:45
【问题描述】:

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

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

【问题讨论】:

    标签: silverlight listbox wcf-ria-services listboxitem


    【解决方案1】:

    您可以为ListBox 处理MouseLeftButtonDownKeyDown 事件。对于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 事件处理程序(使用“-=”语法),然后在此操作完成后重新附加它。

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

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多