【问题标题】:What is the right event to capture a "Click" in a ListBox on Windows Phone 7?在 Windows Phone 7 上的 ListBox 中捕获“单击”的正确事件是什么?
【发布时间】:2011-01-10 05:40:15
【问题描述】:

我正在编写一个带有 ListBox 的 Windows Phone 7 应用程序。当 ListBox 中的项目被手指“点击”或“击中”时,捕获该项目的正确事件是什么?

我已经尝试过“SelectedIndexChanged”,但是当应用程序被 TombStoned 并且传入的索引为 0 时,它似乎会在 GoBack() 上触发(这看起来很奇怪)。

我目前正在使用 MouseUp,这似乎可以解决问题。但我不确定这是否正确。

注意:我发现单击返回时触发 SelectionChanged 的​​原因。当我的 Page 的构造函数被触发,并且我的 ListBox 的 ItemSouce 被设置(数据绑定)时,它将选择列表中的第一个项目并触发 SelectionChanved 事件。由于这不是由用户操作发起的,我通过简单地创建一个 IsLoaded 布尔值并将其设置为 true 来解决这个问题,然后在构造函数中设置 ItemSource 然后在事件中检查它。

【问题讨论】:

  • 嗨 Omar,上面的线程涵盖了有关 MouseUp 的注意事项,并重复单击/点击相同的列表项。
  • ... 还解决了人们通常在不先重置 SelectedIndex 的情况下使用 SelectedIndexChanged(重复按下不会触发)的问题。

标签: windows-phone-7 event-handling listbox


【解决方案1】:

如果您想在选择项目时收到通知,您应该捕获 SelectionChanged 事件。

在处理程序中,您检查 e.AddedItems 是否只包含一项:

void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems.Count == 1)
    {
        // .. do something
    }
}

在 GoBack() 上,您可能在 e.RemovedItems 集合中有项目,但在 e.AddedItems 中没有。

【讨论】:

  • 我发现这种机制的一个怪癖是,当 ListBox 的 ItemSource 更新时(如在构造函数中),SelectionChanged 会触发。在这种情况下,SelectedIndex 是该列表中的第一项。
  • 如果像我一样,您从不真正希望选择这些内容,而只是希望它们可点击,请记住在完成后将 SelectedIndex 设置回 -1,否则单击相同事情两次不会做任何事情。
  • 嗨 Chris R,当我们将 selectedIndex 设置回 -1 时,它会再次运行 SelectionChanged 事件(因为将 selectedIndex 设置回 -1 又是另一个 SelectionChange)。因此,每次单击列表框项目时,此事件都会运行两次。因此仍然想知道哪个是实现列表框项单击事件的最佳事件。我尝试使用 Tap 事件(列表框)并想知道这个想法。非常感谢...
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多