我正在数据网格中的celleditending事件中进行验证。一旦消息 如果我在消息框中单击确定,则会在消息框中显示。焦点在 datagrid移动到上一行。我希望焦点在当前的验证行中。
我尝试了这段代码,但它没有用。
int index = attendancegrid .SelectedIndex;
attendancegrid .SelectedItem = attendancegrid .Items[index];
attendancegrid .ScrollIntoView(attendancegrid .Items[index]);
如果有人知道如何关注当前验证行,请使用一些代码来帮助我
答案 0 :(得分: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