Как обнаружить двойной щелчок по списку прокрутки? - PullRequest
11 голосов
/ 13 января 2010

У меня есть два списка просмотра на WPF. Первое представление списка загружается с Datatable. При двойном щелчке по одному элементу из первого списка просмотра selectedItem перемещается во второй список просмотра.

Проблема возникает, когда появляется полоса прокрутки в первом представлении списка из-за большого количества элементов, загруженных из DataTable. Если выбрать один элемент и дважды щелкнуть стрелку прокрутки вниз, запускается событие MouseDoubleClick и выбранный элемент перемещается во второй список.

Как я могу обнаружить двойной щелчок на полосе прокрутки, чтобы предотвратить это?

Большое спасибо!

Ответы [ 4 ]

5 голосов
/ 08 сентября 2010

Я протестировал приведенный выше код, который был очень полезен, но обнаружил, что следующее является более стабильным, так как иногда источник сообщается как GridViewRowPresenter, когда фактически вы дважды щелкаете элемент.

var src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource);
var srcType = src.GetType();
if (srcType == typeof(ListViewItem) || srcType == typeof(GridViewRowPresenter))
{
    // Your logic here
}
3 голосов
/ 04 августа 2010

Попробуйте это в вашем событии MouseDoubleClick при первом просмотре списка:

DependencyObject src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource);

if(src is Control && src.GetType() == typeof(ListViewItem))
{
    // Your logic here
}

На основании это .

Я использую это в различных проектах, и это решает проблему, с которой вы сталкиваетесь.

2 голосов
/ 06 мая 2014
private void ListBox_OnMouseDoubleClick(object pSender, MouseButtonEventArgs pE)
{
  FrameworkElement originalSource = pE.OriginalSource as FrameworkElement;
  FrameworkElement source = pE.Source as FrameworkElement;

  if (originalSource.DataContext != source.DataContext)
  {
      logic here
  }         
}

Если у вас есть DataContext, вы можете легко увидеть, является ли отправитель элементом или основным списком

1 голос
/ 22 ноября 2017

У меня есть окончательное решение:

private void ListView_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var originalSource = (DependencyObject)e.OriginalSource;
    while ((originalSource != null) && !(originalSource is ListViewItem)) originalSource = VisualTreeHelper.GetParent(originalSource);
    if (originalSource == null) return;
}

у меня это работает.

...