在Silverlight 5中,我有DataGrid
个ContextMenuService.ContextMenu
。如果单击要选择的行,则右键单击,只需检查grid.selecteditem以获取上下文。但是,如果右键单击某行而不选择它,则在菜单打开时没有该行的上下文。 当上下文菜单打开时,如何获得右键单击的网格的DataContext
行?右键单击网格似乎是一个选项,但是它被拦截了contextmenu并且除非上下文菜单已经开放/焦点,否则不会触发。
我找到了大量的解决Silverlight 4原始问题并检测右键单击的问题的例子。但是,contextmenu现在拦截了网格的严格点击,因此没有logner工作。我还发现了关于“错误”的帖子,其中包含了ContextMenu的初始关系。所有这些帖子/博客都使得很难找到当前的答案或解决方案。
答案 0 :(得分:1)
是的,似乎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;
}
我知道这很难看,但它正在发挥作用。
答案 1 :(得分:0)
除了Roger对准确性的担忧之外,我不想在每一行都连接这些事件,因为我的网格很大,而且我必须保持精确。
我在这里找到了解决方案......
https://mutelight.org/silverlight-datagrid-make-right-click-select-a-row
只将一个事件处理程序应用于网格的MouseRightButtonDown事件。事件args具有鼠标位置,您可以使用VisualTreeHelper查找鼠标所在的DataGridRow。然后该行的DataContext将具有您的SelectedItem。