如何检测双击列表视图滚动条?

时间:2010-01-13 11:05:18

标签: wpf listview scrollbar double-click

我在WPF上有两个列表视图。第一个listview加载了Datatable。双击第一个列表视图中的一个项目时,selectedItem将移动到第二个列表视图。

由于从DataTable加载了大量元素,因此在第一个列表视图中出现滚动条时会出现问题。如果选择一个项目并双击滚动条向下箭头,则会启动MouseDoubleClick事件,并将所选项目移动到第二个列表视图。

如何检测滚动条上的双击以防止这种情况?

非常感谢!

4 个答案:

答案 0 :(得分:5)

我测试了上面的代码非常有用,但发现以下代码更稳定,因为有时候源会报告为GridViewRowPresenter,而实际上你是双击某个项目。

var src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource);
var srcType = src.GetType();
if (srcType == typeof(ListViewItem) || srcType == typeof(GridViewRowPresenter))
{
    // Your logic here
}

答案 1 :(得分:3)

在第一个Listview上的MouseDoubleClick事件中尝试这个:

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

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

基于this

我在各种项目中使用它,它解决了你所面临的问题。

答案 2 :(得分:2)

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时,您可以轻松查看发件人是项目还是主列表框

答案 3 :(得分:1)

我已经得到了最终解决方案:

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

它对我有用。