Ну, большая проблема в том, что когда вы щелкаете по строкам DataGrid, MouseLeftButtonDown не поднимается, потому что этот щелчок обрабатывается на уровне строк.
Я давно отказался от работы с некоторыми элементами управления напрямую.У меня есть собственная производная версия DataGrid, DataForm и т. Д. Это только облегчает развертывание моего решения, потому что я в любом случае не использую версии vanilla.
Я добавил новое событие под названием ClickInclusionHandled,это немного многословно, но оно правильно описывает, что происходит, и будет приятно отображаться прямо под Click с IntelliSense - если элемент управления имеет событие Click для начала.
В любом случае, ниже моя реализация этого.Затем вы можете подписаться на это событие и использовать ClickCount, чтобы определить количество кликов, которые вы хотите захватить.Я заметил, что это немного медленно, но работает чисто.
public partial class DataGridBase : DataGrid
{
public event MouseButtonEventHandler ClickIncludingHandled;
public DataGridBase() : base()
{
this.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(OnClickInclHandled), true);
}
private void OnClickInclHandled(object sender, MouseButtonEventArgs e)
{
if (ClickIncludingHandled != null)
{
ClickIncludingHandled(sender, e);
}
}
}