WPF остановить ListView ScrollBar стрельбы - PullRequest
8 голосов
/ 27 августа 2009

Я использую WPF ListView с всегда видимой вертикальной полосой прокрутки. У меня есть обработчик события MouseLeftButtonUp в ListView. Обработчик работает правильно, за исключением случаев, когда вертикальная полоса прокрутки нажата, когда ему нечего делать, т. Е. В окне ListView недостаточно элементов для прокрутки.

В этом случае ничего не должно произойти, так как пользователь нажал на вертикальную полосу прокрутки, чтобы убедиться, что рядом с экраном нет предметов. Однако ListView запускает событие MouseLeftButtonUp. Если у вертикальной полосы прокрутки есть какая-то работа, событие не запускается.

Вот мой упрощенный 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>

Есть ли какой-либо способ предотвратить запуск события MouseLeftButtonUp при нажатии на вертикальную полосу прокрутки, независимо от того, должна ли полоса прокрутки выполнять какую-либо работу?

Ответы [ 3 ]

8 голосов
/ 19 февраля 2015

Ни один из других ответов не работал в моем случае из-за сложного стиля в ListBoxItem. Это сделал однако:

var item = ItemsControl.ContainerFromElement(sender as ItemsControl, (DependencyObject)e.OriginalSource) as ListBoxItem;
if (item != null)
{
    // Handle it
}
4 голосов
/ 28 августа 2009

Это похоже на этот вопрос , и ответ тот же. В обработчике MouseLeftButtonUp проверьте свойство MouseButtonEventArgs.OriginalSource. Это скажет вам, где произошел щелчок.

2 голосов
/ 30 августа 2013

Для ListBox я использовал следующий код:

 if (e.OriginalSource is TextBlock || e.OriginalSource is Border)
 {
     // do your stuff
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...