2009-08-27 59 views
8

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

在这种情况下,用户无需单击垂直滚动条就可以确保屏幕上没有任何项目。但是ListView触发MouseLeftButtonUp事件。如果垂直滚动条确实有一些工作要做,事件不会被解雇。

这里是我的simplifiewd 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事件被点击的滚动条是否有工作做还是不做irespective垂直滚动条射击的时候?

回答

4

这与this question类似,答案也是一样的。在您的MouseLeftButtonUp处理程序中,检查MouseButtonEventArgs.OriginalSource属性。这会告诉你点击来自哪里。

+0

在我自己的GridView中,我有很多列包含图像,文本块,文本块与运行......我应该检查所有这些? – 2010-02-15 02:32:22

2

对于列表框我用下面的代码:

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

在我的情况也不其他答案的工作,因为在ListBoxItem复杂的造型。然而,这确实:

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

这有效。谢谢。 – SteveP 2016-11-01 14:16:49

+0

这也适用于我。其他答案由于列表框中的其他控件而不起作用。谢谢 – superstar 2017-06-07 19:21:53