2013-04-05 111 views
0

我在MVVM /棱鏡應用程序中實現一個DataGridDataGrid支持通過上下文菜單和鍵盤手勢進行剪切/複製/粘貼/刪除。WPF的DataGrid失去焦點的行刪除之後/切割

我發現,當行被刪除/切斷整個DataGrid失去焦點和鍵盤焦點移動到最後的集中控制。

反正是有防止這種情況?

移除一行後,我可能要重新粘貼到DataGrid。此外,如果網格是空的,則根本沒有辦法獲得鍵盤焦點。點擊一個空白的網格不會使它焦點。

這裏有一個類似的問題,但它並沒有解決這個問題對我來說: DataGrid Looses Focus When Delete Key is Pressed

回答

1

您可以設置DataGrid中聚焦在PreviewKeyDown-事件

private void TheDataGrid_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Delete) 
    { 
     var grid = (DataGrid)sender; 
     FocusManager.SetFocusedElement(Window.GetWindow(grid), grid); //not tested 
    } 
} 

如果你不想把代碼中的代碼隱藏在組合使用AttachedPropertiesDependencyPropertyChanged-Event
How to set set focus

+0

是......這個效果很好,謝謝。 我發現我必須處理Delete和Ctrl-X。此外,我強制關注MouseDown(用於聚焦空網格)和ContextMenuClosing(用於在單擊「剪切/刪除」之後進行聚焦)。 – Terrence 2013-04-05 22:23:33

+1

我說得太快了。在編輯單元格時,PreviewKeyDown具有被調用的不幸副作用。在這些情況下,它從小區偷走焦點。我發現在UnloadingRow中設置焦點的效果很好。 – Terrence 2013-04-06 00:19:03

0

一個骯髒的解決辦法可能是處理LostFocus事件被曝光DataGrid和控制設置焦點。

它可以說是輕微侵犯即保持視線笨得像地獄MVVM模式,但它仍然是查看代碼。