2009-08-27 20 views
8

Estoy usando un WPF ListView con una barra de desplazamiento vertical siempre visible. Tengo un controlador de eventos MouseLeftButtonUp en ListView. El controlador funciona correctamente, excepto cuando se hace clic en la barra de desplazamiento vertical cuando no tiene nada que hacer, es decir, el cuadro ListView no tiene suficientes elementos para desplazarse.WPF stop ListView ScrollBar encendido haz clic en

En ese caso, no debería pasar nada, ya que el usuario ha hecho clic en la barra de desplazamiento vertical solo para asegurarse de que no hay elementos fuera de la pantalla. Sin embargo, ListView activa el evento MouseLeftButtonUp. Si la barra de desplazamiento vertical tiene algo de trabajo que hacer, el evento no se dispara.

Aquí es mi 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> 

¿Hay alguna forma para evitar que el evento MouseLeftButtonUp de disparar cuando la barra de desplazamiento vertical se hace clic en irespective de si la barra de desplazamiento tiene ningún trabajo que hacer o no?

Respuesta

4

Esto es similar a this question, y la respuesta es la misma. En su controlador MouseLeftButtonUp, marque la propiedad MouseButtonEventArgs.OriginalSource. Eso le dirá dónde se originó el clic.

+0

En mi propio GridView, tengo muchas columnas que contienen una imagen, bloques de texto, bloques de texto con Ejecuciones ... ¿Se supone que debo verificar todos esos? –

2

Para ListBox He utilizado el siguiente código:

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

Ninguna de las otras respuestas funcionó en mi caso, debido a un estilo complejo en el ListBoxItem. Esto sin embargo:

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

Esto funciona. Gracias. – SteveP

+0

Esto también me funciona. Otras respuestas no funcionarán debido a los otros controles en el cuadro de lista. Gracias – superstar