帮助与WPF的TextCompositionManager事件(Help with the WPF

2019-06-24 07:26发布

关于这个文档是非常以次充好。 有一个数字,你可以挂接到监控,并采取通过该访问的TextCompositionManager文本输入的控制事件。 如果你想要做像钉子卡刷卡数据,这是你会做到这一点。

有三个事件的关注文本输入:TextInputTextStartTextUpdate。 有两个版本的每个事件的,一个其中该事件是隧穿和当它被鼓入 (从聚焦UI元素向上行进到窗口)(从窗口到具有焦点的控制下行驶):

隧道:

  • PreviewTextInputEvent
  • PreviewTextInputStartEvent
  • PreviewTextInputUpdateEvent

冒泡:

  • TextInputEvent
  • TextInputStartEvent
  • TextInputUpdateEvent

因此,根据在哪里,你钩到的TextCompositionManager逻辑树,您可以修改这些文本事件他们得到了事件的焦点之前,或者只是查看他们算账。 这一切都是在文档和使用非常简单明了。


TL; DR

我无法找到这三个事件的一个体面的定义。 一个可以接受的答案,不仅定义了三个事件(TextInput之TextInputStart和TextInputUpdate),同时也将比较和对比它们。 答案不共享,请参考你的源代码和维基百科是关闭的限制。 你的成绩的25%取决于此。

Answer 1:

它们之间的区别取决于你正在输入的内容类型的角色。

  • 标准键:可打印字符,如'A', 'A', '5', '%',退格键,等等。
  • 控制键:Ctrl + C键,Ctrl + H键,Ctrl + M等
  • 十进制键码:之类的东西ALT +小键盘2 5 5(对IBM扩展ASCII代码255,这是Unicode不间断空格U + 00A0)和Alt +小键盘0 2 5 5(用于Windows ANSI代码255,这是Unicode U + 00FF)。 很可能也适用于ALT +数字键盘加2 6 3 B(用于U + 263B),如果你有注册表设置来启用它 ; 我还没有证实这一点。 (我设置的注册表设置,但它并没有立竿见影的效果,可能需要重新启动。)
  • 死键:我的理解是多语言键盘有额外的东西叫做“死键”是修改下面的按键。 例如,你可能会按“变音”死键,然后按“O”,这将“类型”一O(O-元音变音)。 (我可能有错误的细节我一直使用的EN-US键盘,我不知道怎么样才能用死键。)我怀疑这会表现得同样用十进制代码; 见下文。
  • 输入法:表意语言使用一种叫做“输入法编辑器”。 我知道,即便是这些比我少约死键,我不知道他们是否解雇这些事件或没有。

需要注意的是修饰键像Shift和Ctrl直接(在那里你看到被按下Shift键,然后将5按压等不同的KeyDown)不会触发这些事件。 例如,移+ 5,得到“%”时,仅生成事件(即,一个TextInputStart和一个的TextInput)中的一个序列,与两个接收字符串“%”。


每当你开始键入的字符或代码TextInputStart被激发。 当你按一个标准的键,控制键,或一个小数点键码第一个数字它的发射。 当这个被触发时,系统有时,但并非总是如此,已经知道你是什么按下键(如以标准键和控制键的情况下)。 如果它知道,它会告诉你在TextCompositionEventArgs; 如果它不知道,TextCompositionEventArgs是空的,并告诉你什么都没有。

当你进入一个小数点键码第二次及以后的数字TextInputUpdate被激发。 我还没有看到任何东西,但一个空TextCompositionEventArgs此事件(尽管它可能是与死键或输入法改变)。

当你完成输入密钥的TextInput被触发,系统肯定知道你输入了什么键,因此它总是在TextCompositionEventArgs有用的信息。 此事件意味着人物实际上是被“输入”现在(即,它对应于当字符会显示出来,如果你输入到一个文本框)。


因此,这里的事件序列,如何针对不同类型的字符的工作:

标准键:只要你按下键,你会得到一个TextInputStart紧接着一个TextInput。 两人都在他们的TextCompositionEventArgs相同的内容:e.Text和e.TextComposition.Text都被设置为您按下的键。 (请注意,这并不总是一个可打印字符。如果按Backspace键,它在e.Text)。如果键被按下,你得到的事件对(TextInputStart /的TextInput)为每个键重复。

控制键:只要您按字母键,你会得到紧接着一个TextInput一个TextInputStart。 两人都在他们的TextCompositionEventArgs相同的内容:e.ControlText和e.TextComposition.ControlText都设为您按下控制键。 如果字母键不放,你得到的对事件(TextInputStart /的TextInput)每个键重复的。

十进制关键代码:比方说,你只要按下小键盘上的0按Alt +小键盘上的0 2 5 5,你会得到一个TextInputStart事件,它告诉你绝对没有什么用处。 对于每个按键2小键盘,小键盘上的5,和数字键5,你会得到一个TextInputUpdate事件,再次与无用信息(你不能告诉位数迄今已按下)。 当您松开Alt键(事实上,“类型”,其代码输入的键),那么你得到的TextInput事件,与你在e.Text和e.TextComposition.Text属性中输入的关键。 (这可能是一个非打印字符,例如,如果你输入Alt +小键盘0 8)键重复是不可能的小数键码。

死键:正如我上面提到的,我不知道如何进行测试。 如果任何人有答案,让我知道,我会在这里包含它。

IME:同样,我不知道如何进行测试。


我的印象是,对于大多数的用途,是的TextInput这些事件是有意义的使用(因为其他两个并不总是告诉你什么)的唯一的一个。 这可能是为什么这三多数民众赞成重新公开为标准的路由上的UIElement,UIElement3D和ContentElement的(未连接的)事件的唯一的一个。



文章来源: Help with the WPF TextCompositionManager events