在数据网格C#WPF中按Enter键获取当前选定的单元格

时间:2018-02-03 19:09:22

标签: c# wpf datagrid enter

我是C#新手。我一直在尝试捕获当前按下回车时我当前选择的数据网格单元格中的值,并在其他位置使用该值。我目前正在使用此处理程序的KeyUp事件:

private void Cell_OnKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        DataGrid dg = (DataGrid) sender;
        var u = e.OriginalSource as UIElement;
        e.Handled = true;
        u.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));   
        MyType mo = (MyType) dg.CurrentItem;
        DoSomething(mo);
    }
}

数据网格中Enter键的defualt行为是退出编辑并向下移动到下面的单元格,除非在数据网格的底部。

上面的处理程序工作正常,除非我在数据网格的底部。我最终获取了上面单元格的值...

我尝试过这样的黑客攻击:

bool notEnd = u.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
if (notEnd)
{
    u.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
}   
u.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));

但后来我遇到了无法在底部两个单元格之间进行区分的问题。

所以我想我有两个问题,我很高兴得到答案:

1。有没有办法确定您何时处于数据网格的底行?

2。有没有办法覆盖数据网格中按下的回车键的默认行为?

我将不胜感激任何建议。谢谢。

1 个答案:

答案 0 :(得分:0)

2:是的,你可以,看看 Override the enter key, but keep default behavior for other keys in a wpf datagrid

简短:派生一个自定义的NoEnterDataGrid类,并防止基类在输入时按下处理OnKeyDown()。

1:使用KeyDown事件可能会有所帮助,因为它可能在单元格选择运动之前执行。如果您不想立即执行操作,请将当前单元格存储在KeyDown中,并在KeyUp中执行操作 - 但请注意,如果用户在按住Enter键的同时单击数据网格,则可能会导致奇怪的行为。