【发布时间】:2011-06-22 02:03:02
【问题描述】:
Microsoft 我认为这可能是一个错误。有一个 ListView GridView 来显示单个记录。
当然,向下箭头键在 ListViewItems 中导航。这就是我所期望的行为。在 XAML 中,ItemsSource 和 SelectedIndex 是绑定的。我想要的行为是左右箭头键导航到下一个和上一个记录。
我实现这一点的方法是处理 ListView PreviewKeyDown 事件。我遇到的问题是,当 ItemSource 刷新时,SelectedIndex 重置为 -1,我希望它保留在旧的 SelectedIndex 上。所以我不得不手动重置 SelectedIndex,如下所示。
这是我的问题:在并且仅在左箭头或右箭头键之后,向上和向下键没有传递正确的 SelectedIndex 值。
例如 SelectedIndex = 4 然后向右箭头然后向下键传递给 SelectedIndex 的值是 0,传递的值应该是 4。ListView 在 SelectedIndex 4 上可视,所以它知道 SelectedIndex 是 4 但它也不知道。如果我不更改 ItemsSource,则向上和向下箭头键可以正常工作。我尝试了 KeyDown 和 KeyUp 事件,但如果这些事件在上述失败条件下根本不会触发。
WPF 4.0 Visual Studio 2010。
private void lvCurDocFields_PreviewKeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("lvCurDocFields_PreviewKeyDown " + e.Key.ToString());
e.Handled = false;
Int32 lastIndex;
switch (e.Key) // e.KeyCode
{
case Key.Right:
lastIndex = lvCurDocFields.SelectedIndex;
App.StaticGabeLib.Search.SelectedDocIndex++;
if (lvCurDocFields.SelectedIndex != lastIndex)
{
lvCurDocFields.SelectedIndex = lastIndex;
}
e.Handled = true;
break;
case Key.Left:
lastIndex = lvCurDocFields.SelectedIndex;
App.StaticGabeLib.Search.SelectedDocIndex--;
if (lvCurDocFields.SelectedIndex != lastIndex)
{
lvCurDocFields.SelectedIndex = lastIndex;
}
e.Handled = true;
break;
}
base.OnPreviewKeyDown(e);
}
【问题讨论】: