相关疑难解决方法(0)

如何在WPF/C#中的不同语言环境键盘上捕获'#'字符?

我的WPF应用程序处理键盘按键,特别是#和*字符,因为它是一部VoIP电话.

我有一个国际键盘,特别是英国英语键盘的错误.通常我会听3键,如果shift键修改器关闭,我们会触发一个事件来做事情.然而在英国键盘上,这是'£'字符.我发现英国英语键盘有一个专用的'#'键.显然我们可以只听那个特定的键,但这并不能解决美国英语的问题,即shift-3和所有无数其他键盘都把它放在其他地方.

简而言之,我如何通过按键来聆听特定角色,无论是关键组合还是单键并对其作出反应?

c# wpf keypress

29
推荐指数
1
解决办法
3万
查看次数

KeyEventArgs.Key to char

有没有办法将WPF转换KeyEventArgs.KeyChar

我试着用KeyInterop:

var x = (Char)KeyInterop.VirtualKeyFromKey(e.Key);
Run Code Online (Sandbox Code Playgroud)

对于数字和字母,它工作正常,但对于其他字符,它没有.例如,OemComma它返回'1/4'而不是','.

我需要它来防止用户输入TextBox除数字和分隔符(即逗号或句号)之外的任何字符.

c# wpf textbox keyeventargs

13
推荐指数
3
解决办法
2万
查看次数

帮助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
查看次数