DataGrid + ContextMenu:如何在右键单击下获取行

时间:2012-03-05 21:48:40

标签: silverlight datagrid contextmenu silverlight-5.0

在Silverlight 5中,我有DataGridContextMenuService.ContextMenu。如果单击要选择的行,则右键单击,只需检查grid.selecteditem以获取上下文。但是,如果右键单击某行而不选择它,则在菜单打开时没有该行的上下文。 当上下文菜单打开时,如何获得右键单击的网格的DataContext行?右键单击网格似乎是一个选项,但是它被拦截了contextmenu并且除非上下文菜单已经开放/焦点,否则不会触发。

我找到了大量的解决Silverlight 4原始问题并检测右键单击的问题的例子。但是,contextmenu现在拦截了网格的严格点击,因此没有logner工作。我还发现了关于“错误”的帖子,其中包含了ContextMenu的初始关系。所有这些帖子/博客都使得很难找到当前的答案或解决方案。

2 个答案:

答案 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。