2011-12-21 171 views
2

我正在尝试编写一个筛选ListBox的页面,具体取决于textbox的内容。我有所有其他的东西工作,但我希望列表框应用过滤器发生在TextBox中的每个KeyDown事件。问题是,当我捕获KeyDown事件并尝试查看TextBox.Text属性时,它仍为空。我想这是由于TextBox在丢失焦点时可能只会更新Text属性。如何在KeyDown事件期间捕获文本框的文本?

关于如何在KeyDown事件期间获得TextBox中当前文本的任何想法,而不必在每个KeyDown期间捕获并重建字符数组?

谢谢!

回答

5
Manual

对于键盘输入,WPF第一发送适当的KeyDown/KEYUP事件。如果这些事件没有处理,并且键是文本(而不是控制键,如方向箭头或功能键),则会引发TextInput事件。

在KeyDown事件,你可以Capture的按下的键:

private void OnKeyDownHandler(object sender, KeyEventArgs e) 
{ 
    Console.WriteLine(e.Key); 
} 

的情况下退出,按键被添加到.Text属性后,等下次KeyDown事件引发,您可以阅读.Text以前输入的字符。

+1

也处理TextChanged,所以你可以通知复制粘贴 – 2011-12-21 00:11:56

+0

这不是我看到的行为。 TextBox.Text似乎没有被应用,直到TextBox失去焦点。 – jermny 2011-12-21 00:13:12

+1

@jermny当发生第一个KeyDown事件时,“Text”属性将仍为空。 – CodeCaster 2011-12-21 00:14:16

2
private void OnKeyUpHandler(object sender, KeyEventArgs e) 
{ 
    var tb = sender as TextBox; 
    if (tb != null){ 

     MessageBox.Show(tb.Text); 
    } 
} 
相关问题