您无法更改该行为,因为 MouseDoubleClick 处理程序附加到 ListView 控件,因此无论何时单击 ListView 都必须发生它——任何地方。你可以做什么检测 ListView 的哪个元素首先检测到双击,并从那里确定它是否是 ListViewItem。这是一个简单的例子(省略错误检查):
private void lv_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DependencyObject src = (DependencyObject)(e.OriginalSource);
while (!(src is Control))
src = VisualTreeHelper.GetParent(src);
Debug.WriteLine("*** Double clicked on a " + src.GetType().Name);
}
请注意使用 e.OriginalSource 来查找被双击的实际元素。这通常是非常低级别的东西,例如 Rectangle 或 TextBlock,因此我们使用 VisualTreeHelper 走到包含控件。在我的简单示例中,我假设我们点击的第一个控件将是 ListViewItem,如果您正在处理包含例如文本框或复选框的 CellTemplate,则情况可能并非如此。但是您可以轻松地改进测试以仅查找 ListViewItems ——但在这种情况下,不要忘记处理单击在任何 ListViewItem 之外的情况,并且搜索最终会命中 ListView 本身。