问题标签 [textcompositionmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 帮助 WPF TextCompositionManager 事件
这方面的文档非常粗制滥造。您可以挂钩许多事件来监视和控制通过TextCompositionManager访问的文本输入。如果你想做一些类似卡刷卡数据的事情,这就是你要做的地方。
涉及文本输入的三个事件: TextInput、TextStart和TextUpdate。每个事件有两个版本,一个是隧道式事件(从窗口向下移动到具有焦点的控件),一个是在冒泡时(从焦点 UI 元素向上移动到窗口):
隧道:
- 预览文本输入事件
- PreviewTextInputStartEvent
- PreviewTextInputUpdateEvent
冒泡:
- 文本输入事件
- 文本输入启动事件
- 文本输入更新事件
因此,根据您在逻辑树中连接到 TextCompositionManager 的位置,您可以在这些文本事件到达事件焦点之前对其进行修改,或者在之后查看它们。所有这些在文档和使用中都非常简单明了。
TL;博士
我找不到这三个事件的正确定义。一个可接受的答案不仅会定义三个事件(TextInput、TextInputStart 和 TextInputUpdate),还会对它们进行比较和对比。不共享答案,请参考您的来源,维基百科是禁区。你成绩的 25% 取决于此。
wpf - 如何防止输入控件从 TextCompositionManager 中窃取空格字符?
与此问题相关(但不是骗子!): Help with the WPF TextCompositionManager events
在使用TextCompositionManager时,我遇到了一个问题,如果 TextBox 等输入控件具有焦点,则 TextBox 会在我有机会对其采取行动之前“窃取”空格字符。
例如,我们有以下代码:
其中 Window1 看起来像:
现在,如果我运行这个应用程序并立即输入“我喜欢小偷”,TextBlock 将包含文本“我喜欢小偷”,并且文本框将为空。
但是,如果我关注文本框(即文本框具有键盘焦点),则在键入上述行后,文本块将包含文本“Ihaetthievingbastards”,文本框将包含文本“”(3 个空格)。
我有两个问题:
1) 我可以仅使用 TextCompositionManager 提供的工具来防止这种情况发生吗?
2)如果不是,我到底应该在哪里插入文本输入堆栈,以便我可以完全控制我的 WPF 应用程序中的文本输入(甚至考虑 p/invoking 的负面点)(你只是想了一下,增加了负面点) ?
更新
我正在使用一种 hacky 解决方法,我只为空间处理来自 InputManager 的隧道 KeyDown 事件。这种方法非常笨拙,效率低下,而且基本上很臭。还在寻找更好的方法。
wpf - 将 PreviewKeyDown 中收到的键转换为字符串
我在窗口上使用 PreviewKeyDown 事件来接收来自条形码扫描仪的所有键。KeyEventArgs 是一个枚举,并没有给我实际的字符串。我不想使用 TextInput,因为某些键可能由控件本身处理,并且可能不会冒泡到 TextInput 事件。
我正在寻找一种将我在 PreviewKeyDown 中获得的键转换为实际字符串的方法。我查看了 InputManager、TextCompositionManager 等,但我没有找到一种方法来提供键列表并返回一个字符串。TextCompositionManager 或其他东西必须将这些键转换为文本输入中可用的字符串。
c# - 确定虚拟键的对应字符(使用亚洲 IME)。。网
如何在给定虚拟键或虚拟键组合(System.Windows.Input.Key 或System.Windows.Input.KeyGesture )的情况下获取字符(字符或字符串)?我正在使用亚洲输入法,我想确定如果用户按下键盘上的那个键,它将显示在文本框中的亚洲字符或部分字符。
我试过 P/Invoking ToUnicodeEx,但它似乎不适用于亚洲语言。我也尝试过使用 TextCompositionManager 模拟文本合成事件,但除非您已经知道要合成的文本,否则这似乎不起作用。
这个函数最终需要在 WPF 应用程序中使用。