2009-08-27 12 views
8

Ich verwende eine WPF ListView mit einer immer sichtbaren vertikalen Bildlaufleiste. Ich habe einen MouseLeftButtonUp Event-Handler auf der ListView. Der Handler funktioniert ordnungsgemäß, außer wenn die vertikale Bildlaufleiste angeklickt wird, wenn es nichts zu tun hat, d. H. Die ListView-Box hat nicht genug Elemente, um Scrollen zu machen.WPF beenden ListView ScrollBar feuern klicken

In diesem Fall sollte nichts passieren, da der Benutzer auf die vertikale Bildlaufleiste geklickt hat, nur um sicherzustellen, dass sich gerade keine Objekte auf dem Bildschirm befinden. Die ListView löst jedoch das MouseLeftButtonUp-Ereignis aus. Wenn die vertikale Bildlaufleiste einiges zu tun hat, wird das Ereignis nicht ausgelöst.

Hier ist meine 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> 

Gibt es trotzdem, das MouseLeftButtonUp Ereignis Brennen zu verhindern, wenn die vertikale Bildlaufleiste irespective von geklickt wird, ob die Bildlaufleiste hat keine Arbeit zu tun oder nicht?

Antwort

4

Dies ist ähnlich wie this question, und die Antwort ist die gleiche. Überprüfen Sie in Ihrem MouseLeftButtonUp Handler die MouseButtonEventArgs.OriginalSource Eigenschaft. Dadurch erfahren Sie, woher der Klick stammt.

+0

In meiner eigenen GridView habe ich viele Spalten mit einem Bild, Textblöcke, Textblöcke mit Läuft ... soll ich für alle diese? –

2

Für List-Box habe ich den folgenden Code verwendet:

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

Weder die anderen Antworten in meinem Fall war aufgrund des komplexen Styling im ListBoxItem. Dies tat jedoch:

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

Das funktioniert. Vielen Dank. – SteveP

+0

Das funktioniert auch für mich. Andere Antworten funktionieren aufgrund der anderen Steuerelemente im Listenfeld nicht. Vielen Dank – superstar