2009-08-27 17 views
8

Her zaman görünür bir dikey kaydırma çubuğuna sahip bir WPF ListView kullanıyorum. ListView'de bir MouseLeftButtonUp olay işleyicim var. Hiçbir şey yapmadığında dikey kaydırma çubuğu tıklandığında, işleyici düzgün çalışıyor, yani ListView kutusunda kaydırma yapmak için yeterli öğe yok.WPF durağı ListView ScrollBar ateşleme tıklayın

Bu durumda, kullanıcı sadece ekranın dışında hiçbir öğe olmadığından emin olmak için dikey kaydırma çubuğunu tıkladığı için hiçbir şey olmamalıdır. Ancak, ListView, MouseLeftButtonUp olayını başlatır. Eğer dikey kaydırma çubuğunun çalışması için bazı çalışmalar varsa, olay kovulmaz. İşte

<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> 

dikey kaydırma çubuğu kaydırma çubuğu yapmak ya da olmamak herhangi bir çalışma olup olmadığı hakkındaki irespective tıklandığında ateş MouseLeftButtonUp olayı önlemek için yine de var mı benim simplifiewd XAML nedir?

cevap

4

Bu, this question'a benzer ve yanıt aynıdır. MouseLeftButtonUp işleyicinizde, MouseButtonEventArgs.OriginalSource özelliğini kontrol edin. Bu, tıklamanın nereden kaynaklandığını söyleyecektir.

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

Kendi GridView'ımda, bir resim, metin engelleri, Runs ile metin blokları içeren çok sayıda sütun var ... tüm bunları kontrol etmem gerekiyor mu? –

2

ListBox için aşağıdaki kodu kullandım. Bununla birlikte, bu:

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

diğer cevapların hiçbiri çünkü ListBoxItem karmaşık stil benim durumumda çalıştı:

+0

Bu çalışır. Teşekkürler. – SteveP

+0

Bu benim için de çalışıyor. Diğer cevaplar, liste kutusundaki diğer denetimler nedeniyle çalışmaz. Teşekkürler – superstar