1
17
它们之间的区别取决于您键入的字符类型。
请注意,像shift和ctrl这样的修改键不会直接触发这些事件(与您看到按下shift、然后按下5等的键不同)。例如,shift+5,要获取“%”,只生成一个事件序列(即一个textinputstart和一个textinput),两个事件序列都接收字符串“%”。 文本启动 每当您开始键入字符或字符代码时都会激发。当你按下一个标准键、一个控制键或一个十进制键代码的第一位时,它就会被触发。当这被触发时,系统有时(但并非总是)已经知道您按下的是什么键(就像在标准键和控制键的情况下)。如果它知道,它将在textcompositionEventArgs中告诉您;如果它不知道,textcompositionEventArgs是空的,根本不会告诉您任何信息。 文本更新 在输入十进制键代码的第二位和后续数字时激发。对于这个事件,我只看到了一个空的textcompositionEventargs(尽管有可能它会随死键或IME而改变)。 文本输入框 在您输入完密钥后被激发,并且系统确定您输入了什么密钥,因此它在textcompositionEventargs中始终具有有用的信息。此事件表示该字符现在实际上正在被“键入”(即,它对应于在文本框中键入时该字符将出现的时间)。 下面是事件序列如何处理不同类型的字符: 标准键: 只要按下键,就会立即得到一个textinputstart,后面紧跟一个textinput。它们的textcompositionEventArgs中的内容相同:e.text和e.textcomposition.text都设置为您按下的键。(请注意,这并不总是可打印字符。如果您按下backspace,它在e.text中。)如果按下键,您将获得每个键重复的事件对(textinputstart/textinput)。 控制键: 只要按字母键,就会立即得到一个textinputstart,后跟一个textinput。它们的textcompositionEventArgs中的内容相同:e.controlText和e.textcomposition.controlText都设置为您按下的控制键。如果按住字母键,则为每个键重复获取一对事件(textinputstart/textinput)。 十进制键代码: 假设你在输入alt+numpad 0 2 5 5 5。只要你按下numpad 0,就会得到一个textinputstart事件,它告诉你没有任何有用的信息。对于每一个击键numpad 2、numpad 5和numpad 5,您都会得到一个textinputupdate事件,同样也没有有用的信息(到目前为止,您无法知道按下了哪些数字)。当您释放alt键(实际上是“键入”您输入的代码的键)时,您将得到textInput事件,以及您在e.text和e.textcomposition.text属性中输入的键。(这可能是不可打印的字符,例如,如果您输入了alt+numpad 0 8。)对于十进制键代码,键重复是不可能的。 死键: 正如我上面提到的,我不知道如何测试这个。如果有人知道答案,请告诉我,我会把它包括在这里。 IME: 再说一次,我不知道如何测试这个。 我的印象是,在大多数情况下,textfinput是唯一一个有意义的事件(因为其他两个事件并不总是告诉你任何事情)。这可能就是为什么它是在uielement、uielement3d和contentelement上作为标准路由(非附加)事件公开的三个事件中唯一的一个。 |