WPF parada ListView ScrollBar disparo clique

votos
8

Eu estou usando um WPF ListView com uma barra de rolagem vertical sempre visível. Eu tenho um manipulador de eventos MouseLeftButtonUp na ListView. O manipulador está funcionando corretamente, exceto quando a barra de rolagem vertical é clicado quando não tem nada para fazer isto é a caixa de ListView não tem elementos suficientes para fazer qualquer rolagem.

Nesse caso, nada deve acontecer como o usuário clicou na barra de rolagem vertical apenas para se certificar que não há itens apenas fora da tela. No entanto, o ListView aciona o evento MouseLeftButtonUp. Se a barra de rolagem vertical tem algum trabalho a fazer caso não ser demitido.

Aqui está o meu 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>

Existe uma maneira de impedir que o acionamento do evento MouseLeftButtonUp quando a barra de rolagem vertical é clicado irespective de saber se a barra de rolagem tem algum trabalho a fazer ou não?

Publicado 27/08/2009 em 02:57
fonte usuário
Em outras línguas...                            


3 respostas

votos
6

Nenhuma das outras respostas trabalhou no meu caso por causa do estilo complexo no ListBoxItem. Este fez no entanto:

var item = ItemsControl.ContainerFromElement(sender as ItemsControl, (DependencyObject)e.OriginalSource) as ListBoxItem;
if (item != null)
{
    // Handle it
}
Respondeu 19/02/2015 em 11:26
fonte usuário

votos
4

Isso é semelhante a esta pergunta , ea resposta é a mesma. Em seu MouseLeftButtonUpmanipulador, verifique a MouseButtonEventArgs.OriginalSourcepropriedade. Isso vai lhe dizer onde o clique foi originado.

Respondeu 28/08/2009 em 00:06
fonte usuário

votos
2

Para ListBox Eu usei o seguinte código:

 if (e.OriginalSource is TextBlock || e.OriginalSource is Border)
 {
     // do your stuff
 }
Respondeu 30/08/2013 em 05:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more