2009-08-27 87 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