我有一个DataGrid,它显示当前所选行的RowDetailTemplate。用户可以轻松地使用向上和向下箭头键滚动DataGrid,但是当用户到达DataGrid中的最后一行时会发生奇怪的事情:不是将焦点保持在最后一行,而是进入RowDetailTemplate。 我不介意在行选择中失去焦点,但问题是RowDetailTemplate中的第一个UserControl是一个ComboBox,然后它也会通过更改其选择来响应向下箭头键。我有一些客户已经抱怨他们无意中更改了ComboBox中的值,因为他们没有注意到焦点从行移动到ComboBox。
到目前为止,我发现的唯一解决方案是将IsTabStop设置为false,但这也意味着用户无法再使用tab键来访问所述ComboBox。
有没有人知道如何通过箭头键阻止焦点进入RowDetailTemplate?
答案 0 :(得分:0)
如果你们互相阅读这些问题会很好,因为我刚刚在今天早些时候回答了一个几乎相同的问题。有关详细信息,请查看我对WPF C# How to disbale Focus changes by Arrow Keys问题的回答。但是,您的问题与我的问题完全不同,可以阻止我将其作为副本关闭。
原则保持不变...但是您需要在e.Handled
事件处理程序中将true
属性设置为PreviewKeyDown
以停止正常行为(来自链接问题):
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Left || e.Key == Key.Right)
{
// Move your camera here
e.Handled = true;
}
}
唯一的区别是,在取消正常行为之前,您需要检查是否已经到达最后一项。