【问题标题】:How to handle the event when click on empty space?单击空白区域时如何处理事件?
【发布时间】:2010-08-24 07:45:33
【问题描述】:

我想在列表视图左键单击空白区域时捕捉事件 - 即单击列表视图控件中的任何项目。

我在列表视图的事件列表中进行了搜索,但没有找到。我怎样才能做到这一点? 请帮忙!

[编辑] 如果我能捕捉到这个事件,我想做什么:取消选择列表视图中的所有项目。

【问题讨论】:

标签: wpf listview event-handling


【解决方案1】:

如果您将处理程序附加到 ListView 上的 MouseLeftButtonDown 事件,它只会在单击 ListViewItem 之外的区域时触发。项目内的任何点击都将由项目本身处理,以驱动 ListView 的选择行为。

您可以通过在 ListView 上设置 ItemContainerStyle 来调整背景({x:Null} 不可点击,其他任何内容)和 ListViewItems 的边距来更改可点击区域。还要确保您没有在 ListView 本身上使用空背景(白色是默认设置,透明也可以)。

【讨论】:

    【解决方案2】:

    ListBoxItem 控件处理 ListBox 上的点击。您应该:

    • 在 ListBox 上使用 PreviewMouseDown 事件
    • 通过myListBox.AddHandler方法在代码中添加事件处理程序

    有关说明和代码示例,请参阅 How to Attach to MouseDown Event on ListBox

    【讨论】:

    • 附带说明:项目将处理 MouseDown 事件,但不处理 MouseUp 事件。因此,即使单击某个项目或空白区域,您也会在 ListBox/ListView 上获得 MouseUp 事件。
    【解决方案3】:

    我发现如果我之前单击了列表视图中的一个项目(并因此选择了它),然后双击列表视图中的空白区域,则会导致先前选择的项目被执行,就好像它有被双击(而不是空白)。为了解决这个问题,我使用了以下代码(vb.net):

    Private Sub ListView1_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles ListView1.MouseLeftButtonDown
    
        ListView1.SelectedIndex = -1
    
    End Sub
    

    使用此代码,双击空白区域会取消选择任何先前选择的项目,并具有预期的效果,即当用户双击空白区域时,不会发生任何事情。

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2020-09-09
      • 2015-11-30
      相关资源
      最近更新 更多