2013-04-05 144 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模式,但它仍然是查看代码。