Вы не можете изменить поведение, потому что обработчик 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, что может быть не так, если вы имеете дело с шаблонами CellTemplates, которые содержат, например, текстовые поля или флажки. Но вы можете легко уточнить тест, чтобы искать только ListViewItems - но в этом случае не забудьте обработать случай, когда щелчок находится вне любого ListViewItem, и поиск в конечном итоге попадает в сам ListView.