2015-01-16 2 views
0

Я использую WPF DataGrid с C#/XAML в Visual Studio 2013.C# WPF/XAML Preview Mouse Event для DataGrid

С SelectionMode = "Extended", я в состоянии множественного выбора строк в сетка.

У меня есть требование, когда клики по одному из столбцов сетки игнорируются относительно выбора строки.

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

Я хочу, чтобы иметь возможность прервать событие клика в этот момент так что никаких изменений в текущих выбранных элементах сетки не будет. Это возможно?

В случае мыши вниз я пытался что-то вроде:

private void GridCtrl_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
      // ... Other code 
      e.Handled = true; 
    } 

Но, несмотря на отмеченные как обработанное, оно все еще продолжается, и выполняет выбор строк. У меня также есть событие SelectionChanged, которое я вижу, что он позже попадает.

+0

Возможно, выбор происходит в MouseUp, и вы должны обработать Prev Событие iewMouseUp? –

+0

Вот и все! Это исправило это. Благодаря! –

ответ

0

Я думаю, что вам действительно нужно обрабатывать как туннельные события - одно для PreviewLeftMOuseButtonDown, а другое для PreviewSelectionChanged.

Мой совет создать флаг, давайте назовем его:

bool _cancelSelectionChange = false; 

Затем в обработчике мыши:

private void GridCtrl_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
     _cancelSelectionChange = false; 

     // ... Other code 
     _cancelSelectionChange = true; 
     e.Handled = true; 
} 

Наконец, в обработчике изменения выбора для туннельной события:

private void GridCtrl_PreviewSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    e.Handled = _cancelSelectionChange; 
}