2009-08-27 12 views
8

Sto usando un ListView WPF con una barra di scorrimento verticale sempre visibile. Ho un gestore di eventi MouseLeftButtonUp sul ListView. Il gestore funziona correttamente, tranne quando viene cliccata la barra di scorrimento verticale quando non ha nulla da fare, cioè la casella di ListView non ha abbastanza elementi per fare lo scrolling.Stop WPF ListView ScrollBar click di accensione

In tal caso, non dovrebbe accadere nulla in quanto l'utente ha fatto clic sulla barra di scorrimento verticale solo per assicurarsi che non ci siano elementi appena fuori dallo schermo. Tuttavia, ListView attiva l'evento MouseLeftButtonUp. Se la barra di scorrimento verticale ha del lavoro da fare, l'evento non viene licenziato.

Ecco il mio XAML simplifiewd

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

Esiste un modo per evitare che l'evento MouseLeftButtonUp sparare quando la barra di scorrimento verticale viene cliccato irespective dal fatto che la barra di scorrimento ha qualche lavoro da fare o no?

risposta

4

Questo è simile a this question e la risposta è la stessa. Nel gestore , verificare la proprietà MouseButtonEventArgs.OriginalSource. Questo ti dirà dove ha avuto origine il clic.

+0

Nella mia GridView, ho molte colonne contenenti un'immagine, blocchi di testo, blocchi di testo con Run ... dovrei controllare per tutti quelli? –

2

Per ListBox ho usato il seguente codice:

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

Nessuna delle altre risposte lavorato nel mio caso a causa di uno stile complesso nella ListBoxItem. Ciò tuttavia:

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

Questo funziona. Grazie. – SteveP

+0

Questo funziona anche per me. Altre risposte non funzioneranno a causa degli altri controlli nella casella di riepilogo. Grazie – superstar