我有一个DataGrid带有ContextMenu. 我想要的是当弹出上下文菜单(通过右键单击)时,我想获取所选行上的列数据。该数据将用于确认是否应启用某些上下文菜单选项。
所以我尝试了MouseRightButtonUp事件处理程序,但最终得到了一个NullReferenceException.
<DataGrid MouseRightButtonUp="DataGrid_MouseRightButtonUp">
private void DataGrid_MouseRightButtonUp(object sender, MouseButtonEventArgs e) {
MessageBox.Show(((DataRowView)DataGrid.SelectedItem).Row.ItemArray[0].ToString());
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试了SelectionChanged最终有效的事件,但是,如果多次选择它,它不会连续工作一次以上。我需要它,以便每次右键单击一行时,该事件都会触发并返回列数据。此外,此事件是在不需要的左键单击时触发的。
此时我可以选择哪些选项?
您可以尝试直接在 DataGridRow 上设置 MouseRightClick 事件处理程序,如下所示:
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseRightButtonUp" Handler="YourHandler"/>
</Style>
</DataGrid.Resources>
Run Code Online (Sandbox Code Playgroud)
这样,您就不必尝试查找单击的行,这限制了出现错误的可能性。您将可以直接访问事件处理程序中的行。
希望有帮助!