标签: textcompositionmanager

帮助WPF TextCompositionManager事件

这方面的文档非常粗制滥造.您可以连接许多事件来监视和控制通过TextCompositionManager访问的文本输入.如果您想要做一些像snag卡刷卡数据这样的事情,那就是你要做的事情.

有三个事件的关注文本输入: 的TextInput,TextStartTextUpdate.每个事件有两个版本,一个是事件隧道(从窗口向下移动到具有焦点的控件)以及当它冒泡(从聚焦的UI元素向上移动到窗口)时:

隧道:

  • PreviewTextInputEvent
  • PreviewTextInputStartEvent
  • PreviewTextInputUpdateEvent

冒泡:

  • TextInputEvent
  • TextInputStartEvent
  • TextInputUpdateEvent

因此,根据您在TextCompositionManager中挂钩的逻辑树中的位置,您可以在它们到达事件焦点之前修改这些文本事件,或者之后只查看它们.所有这些在文档和使用中都非常简单明了.


TL; DR

我找不到这三个事件的合理定义.可接受的答案不仅会定义三个事件(TextInput,TextInputStart和TextInputUpdate),还会比较和对比它们.没有分享答案,请参考您的来源和维基百科是不受限制的.你的成绩的25%取决于此.

wpf events textinput textcompositionmanager

8
推荐指数
1
解决办法
5031
查看次数

如何防止输入控件从TextCompositionManager中窃取空格字符?

这个问题的相关(但不是愚蠢!): 帮助WPF TextCompositionManager事件

当使用TextCompositionManager时,我遇到了一个问题,即如果TextBox等输入控件具有焦点,TextBox将"窃取"空格字符,然后才能有机会对其进行操作.

例如,我们有以下代码:

public Window1()
{
  TextCompositionManager.AddPreviewTextInputStartHandler
    (this, PreviewTextInputStartHandler);
}

private void PreviewTextInputHandler(object sender, TextCompositionEventArgs e)
{
  CaptureTextBlock.Text += e.Text;
  e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

Window1的样子:

<!--standard window crap above here-->
<StackPanel>
  <TextBlock Name="CaptureTextBlock" />
  <TextBox Name="ThievingBastard" />
</StackPanel>
<!-- snip -->
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行此应用程序并立即键入"我讨厌窃贼的混蛋",TextBlock将包含文本"我讨厌窃贼的混蛋",文本框将为空.

但是,如果我关注文本框(即文本框具有键盘焦点),则在键入上面的行后,文本块将包含文本"Ihaetthievingbastards",文本框将包含文本""(3个空格).


我有两个问题:
1)我可以使用TextCompositionManager提供的工具来防止这种情况发生吗?
2)如果没有,我到底在哪里插入文本输入堆栈,以便我可以完全控制我的WPF应用程序中的文本输入(甚至考虑p /调用的负面点)(你只是想到它,添加了负点) ?


更新

我正在使用一个hacky解决方法,我只从InputManager处理隧道KeyDown事件.这种方法非常笨拙,效率低下,基本上很臭.仍在寻找更好的方法.

wpf textinput textcompositionmanager

4
推荐指数
1
解决办法
3588
查看次数

标签 统计

textcompositionmanager ×2

textinput ×2

wpf ×2

events ×1