我正在使用带有始终可见的垂直滚动条的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事件在单击垂直滚动条时触发,无论滚动条是否有任何工作要做?
答案 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
}