DataGrid + ContextMenu: Как получить строку под правой кнопкой мыши - PullRequest
0 голосов
/ 06 марта 2012

В Silverlight 5 у меня есть DataGrid с ContextMenuService.ContextMenu.Если щелкнуть строку для выбора, а затем щелкнуть правой кнопкой мыши, вы просто проверьте grid.selecteditem для контекста.Однако, если вы щелкнете правой кнопкой мыши по строке, не выбрав ее, у вас не будет контекста этой строки при открытии меню. Как получить строку DataContext сетки, на которую щелкнули правой кнопкой мыши при открытии контекстного меню? Кажется, что щелчок правой кнопкой мыши на сетке является параметром, но он перехватывается для контекстного меню и вызываетне срабатывает, если контекстное меню уже открыто / находится в фокусе.

Я обнаружил множество примеров того, как обойти исходную проблему с Silverlight 4 и обнаружить строку справа.Тем не менее, контекстное меню теперь перехватывает щелчок правой кнопкой мыши по сетке, поэтому те, кто не работает, не работают.Я также нашел сообщения о «ошибках» с начальным обращением ContextMenu.Все эти сообщения / блоги затрудняют поиск текущего ответа или решения.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Да, похоже, что Silverlight 5 изменил что-то, что сломало старые трюки.

Мы делаем это: добавляем ввод строк в обработчике загрузки строк. EG:

private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
        e.Row.MouseEnter += new MouseEventHandler(Row_MouseEnter);
        e.Row.MouseLeave += new MouseEventHandler(Row_MouseLeave);
}


void Row_MouseEnter(object sender, MouseEventArgs e)
{
        DataGridRow dgr = sender as DataGridRow;
        IncidentGrid.SelectedItem = dgr.DataContext;
}

довольно уродливо, я знаю, но это работает.

0 голосов
/ 27 июня 2013

Помимо забот о точности Роджера, я не хотел связывать эти события в каждом ряду, потому что моя сетка довольно большая, и я должен держать ее в тонусе.

Я нашел решение здесь ....

https://mutelight.org/silverlight-datagrid-make-right-click-select-a-row

Примените только один обработчик события к событию MouseRightButtonDown сетки.Аргументы события имеют положение мыши, и вы можете использовать VisualTreeHelper, чтобы найти, над какой DataGridRow находится мышь.Тогда у DataContext этой строки будет ваш SelectedItem.

...