0

我正在数据网格中的 celleditending 事件中进行验证。一旦消息显示在消息框中,如果我在消息框中单击确定。数据网格中的焦点将移至上一行。我想要当前验证行中的焦点。

我试过这段代码,但没有奏效。

int index = attendancegrid .SelectedIndex;
 attendancegrid .SelectedItem = attendancegrid .Items[index];
 attendancegrid .ScrollIntoView(attendancegrid .Items[index]); 

如果有人知道如何关注当前的验证行,请帮助我一些代码

4

1 回答 1

1

每当您显示 MessageBox 并单击“确定”时,您就会失去 MainWindow 的焦点。尽管正在保存逻辑焦点,所以当您返回 MainWindow 时,您会看到逻辑焦点,当您在范围内单击返回时可以将其转换为键盘焦点。

要了解更多信息,请查看此链接。

http://msdn.microsoft.com/en-us/library/aa969768.aspx

如果您希望使用逻辑焦点并让 wpf 为您完成工作,请阅读以下内容:

http://msdn.microsoft.com/en-us/library/System.Windows.Input.FocusManager(v=vs.110).aspx

现在回答你的问题。我会通过使用 FocusManager.FocusedElement 来解决这个问题。只需在错误模板中设置该属性即可。

另一种方法是订阅 Validation.Error 事件并强制 Keyboard.Focus 方法将对象发送方聚焦在事件处理程序中。

http://msdn.microsoft.com/en-us/library/system.windows.controls.validation.error.aspx

于 2013-10-19T09:03:07.363 回答