WPF停止ListView ScrollBar触发点击

时间:2009-08-27 01:57:34

标签: wpf listview scrollbar

我正在使用带有始终可见的垂直滚动条的WPF ListView。我在ListView上有一个MouseLeftButtonUp事件处理程序。处理程序正常工作,除非单击垂直滚动条时没有任何操作,即ListView框没有足够的项目可以进行任何滚动。

在这种情况下,当用户点击垂直滚动条只是为了确保屏幕上没有任何项目时,不会发生任何事情。但是ListView会触发MouseLeftButtonUp事件。如果垂直滚动条确实有一些工作要做,事件就不会被触发。

这是我简化的XAML

<ListView MouseLeftButtonUp="DoSomething_MouseLeftButtonUp" SelectionMode="Single" ScrollViewer.VerticalScrollBarVisibility="Visible">
  <ListView.View>
    <GridView>
      <GridViewColumn Width="170" Header="Venue" DisplayMemberBinding="{Binding Path=Venue}" />
    </GridView>
  </ListView.View>
</ListView>

无论如何阻止MouseLeftButtonUp事件在单击垂直滚动条时触发,无论滚动条是否有任何工作要做?

3 个答案:

答案 0 :(得分:7)

由于ListBoxItem中的复杂样式,其他任何一个答案都不适用于我的案例。但这确实如此:

var item = ItemsControl.ContainerFromElement(sender as ItemsControl, (DependencyObject)e.OriginalSource) as ListBoxItem;
if (item != null)
{
    // Handle it
}

答案 1 :(得分:4)

这类似于this question,答案是一样的。在MouseLeftButtonUp处理程序中,检查MouseButtonEventArgs.OriginalSource属性。这将告诉您点击的来源。

答案 2 :(得分:2)

对于ListBox,我使用了以下代码:

 if (e.OriginalSource is TextBlock || e.OriginalSource is Border)
 {
     // do your stuff
 }