2

我有一个列表视图,其中有十几行绑定到 xml。我希望有可能将光标定位并定位到某个记录。例如:我有一个带有这些 ID、名称、值的:

1, Johny, Cash, USA
2, Jean-Michel, Jarre, France
3, Jeanette, , USA

当我输入“Je”时,SelectedRow 将定位到 ID 2。当我输入“Jeane”时,SelectedRow 将定位到 ID 3。只是我希望有可能搜索并转到正确的记录在列表视图中。我开始构建 SearchString,此时我陷入了困境:

WPF 中唯一的一种可能性是使用 KeyDown 事件。不幸的是,此事件返回一种 Key,我无法将其转换为字符串。例如,当我按“A”时,SearchString 将是“A”。当我继续输入“B”时,SearchString 将是“AB”等。当 SelectedItem 更改时,SearchString 将设置为 String.Empty。没有可用的 KeyCode 或其他有用的属性/方法。

这里是头部摩擦。如何构建我需要的 SearchString?当我尝试 e.Key.ToString() 时,我得到了非常有趣的字符串 - 例如,对于 Numpad 上的 0,我得到一个键“Numpad0”,对于“,”,我得到“OemComma”等。我也在尝试使用 TryParse 方法来 char ,对于键“3”,我得到一个值“#”等,它仅适用于字母 A 到 Z,对于其他键 TryParse 返回 false。

解决此问题的唯一方法是使用很长的“case e.Key.ToString() of”构建一个转换表:

"A": SearchString = SearchString + "A";
"System", SearchString = SearchString + " ";
"Numpad0", SearchString = SearchString + "0";
"ArrowUp", do nothing 

等等等等等等

没有更聪明更简单的方法吗?或者我只是因为森林而看不到树?

4

1 回答 1

4

改为处理 PreviewTextInput。参考: http ://social.msdn.microsoft.com/Forums/en-US/wpf/thread/3fcfbe53-2c72-4fec-a997-dc881d1de72a 。

编辑:

注意:ListView(和 ListBox 也是)在内部处理某些键的 KeyDown 事件以执行选择和导航。下面是 ListView 内部处理的键:

    Key.Space:
    Key.Return:
    Key.Prior:
    Key.Next:
    Key.End:
    Key.Home:
    Key.Left:
    Key.Up:
    Key.Right:
    Key.Down:

Key.Space 特别有趣,因为在 ListView 上按下空格时,不会触发 PreviewTextInput 事件。因此,要完成您的解决方案,您还必须为 ListView.PreviewKeyDown 事件添加一个处理程序,并检查是否按下了空格键,以便您附加正确的空白文本。

于 2010-09-22T18:44:52.590 回答