2017-03-08 76 views
0

我有一個DataGrid CanUserAddRows =「True」。我的表格有多列,用戶可以編輯單元格並按Tab鍵跳到下一個單元格。當你在最後一列時,Tab會帶你到下一行。WPF DataGrid使新行TabStop

但是,如果您正在編輯新建行,當您在最後一列選中時,焦點將跳轉到創建新行之前的窗口中的下一個控件。

我需要發生的是跳轉到DataGrid中新創建的行的焦點。我真的不知道從哪裏開始攻擊這個問題。

編輯:我應該說明新行的第一列是應該獲得焦點的那一列(想象一下,有人用鍵盤填充網格,使用標籤)。

+0

所以你基本上要TAB表現爲進入? – mm8

+0

是的,如果這是可能的 –

回答

1

你可以處理PreviewKeyDown事件爲DataGrid攔截TAB按鍵和編程按ENTER鍵:

<DataGrid x:Name="dg" ... PreviewKeyDown="dg_PreviewKeyDown" /> 

private void dg_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     e.Handled = true; 

     var key = Key.Enter; 
     var target = Keyboard.FocusedElement; 
     var routedEvent = Keyboard.KeyDownEvent; 

     dg.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual(dg), 0, key) 
     { 
      RoutedEvent = routedEvent 
     }); 
    } 
} 
+0

這是一個聰明的想法,但它沒有完全按照它的方式去做。我做了一些修改以改進它,但總體而言,當發送Enter KeyDown事件時,確實選擇了新行,但在原始Tab出現的下方的列上。應該發生的是應該選擇新行的第一列。 我認爲這是一個很好的問題整體解決方案,有些閃爍我可以使它工作,謝謝。 –

+0

「應該發生什麼......」。不,這不是ENTER的行爲。 – mm8

+0

那麼,然後ENTER不是它所需要的。 –