从 Windows 10 虚拟键盘输入到 WPF 文本框中的快乐表情符号未在文本框的 PreviewTextInput 事件中捕获

     2023-02-25     232

关键词:

【中文标题】从 Windows 10 虚拟键盘输入到 WPF 文本框中的快乐表情符号未在文本框的 PreviewTextInput 事件中捕获【英文标题】:Happy Emoji entered into a WPF textbox from a Windows 10 virtual keyboard is NOT captured in the textbox's PreviewTextInput event 【发布时间】:2018-06-19 10:37:38 【问题描述】:

我想禁止在 WPF 应用程序的输入字段中输入所有表情符号(情感图标)。我实现它的方式是:

txtUserName.PreviewTextInput += LoginPreviewTextInput;

LoginPreviewTextInput 如下所示:

private void LoginPreviewTextInput(object sender, TextCompositionEventArgs e)

     if (!InputValidator.IsValidInput(e.Text))
          e.Handled = true;

InputValidator 的 IsValidInput 如下所示:

public class InputValidator

    //These characters are allowed in the textbox
    private static string pattern = @"^[\w\s,\.\(\)~!@\#\$%\^&\*-=\+\[\]\\:;'""<>\?\\|]*$";
    public static bool IsValidInput(string previewedInput)
    
        var matches = Regex.Matches(previewedInput, pattern);
        if (matches.Count == 1)
        
            return true;
        
        return false;
    

奇怪的是它适用于虚拟键盘中的所有表情符号图标,除了快乐表情符号。 它不起作用,因为一旦我在 Windows 虚拟键盘中输入此 Emoji(它适用于所有其他 Emoji),就不会调用 LoginPreviewTextInput。

Happy Emoji 如下图所示:

在文本框中输入快乐表情后,文本框如下所示:

快乐的表情符号已输入到文本框中。您可以看到,当文本框的文本属性为空时,甚至会显示一个水印。 当我在 snoop 中查看文本框的 text 属性时,确实是空的,而有界属性是 viewmodel 是空的(从未调用过 setter)。

同样,仅针对这个特定的表情符号(快乐的)发生。所有其他 Emoji 都进入 LoginPreviewTextInput 方法,不匹配正则表达式并被忽略。

【问题讨论】:

可能是#638 @wpf.2000things.com/tag/previewtextinput 回答你 @JSR 不幸的是,链接中提供的信息对我没有帮助:我在 TextBox_PreviewKeyDown 和 PasteHandler 的开头都设置了一个断点。通过虚拟键盘输入快乐表情符号时,不会到达这些断点。 【参考方案1】:

在花了一些时间研究这个问题后,我找到了解决这个问题的办法。

为什么你可以按下快乐表情符号?

您能够从虚拟键盘将快乐表情符号输入到您的应用程序中的原因是它是默认的 Windows 符号之一/具有附加的实际字符。 (类似的东西)。

虽然其他表情符号可以这样显示,但我认为虚拟键盘的默认行为是仅使用这些符号,因为它们已经可用并且不需要创建各种字符。

许多其他表情符号也会发生这种情况,例如星星和心形。

这是按下“Happy face”时显示的内容:

这是按“爱眼脸”时显示的内容:

如您所见,实际发生的情况是所有其他表情符号都被标记为它们前面的反斜杠。

你如何解决你的问题?

您的问题的解决方案可能是让正则表达式检查代码是否符合设定的条件。例如,所有字符都是 [a-Z] 或您想要的任何字符。这很可能是解决问题的更好方法,因为这意味着您不会创建大量的排除列表。

【讨论】:

[分享]wpf虚拟键盘

...的数字,这个时候就免不了需要键盘输入。思路:既然是虚拟键盘,那么我的目的就是模拟键盘输入即可。1.模拟键盘输入模拟键盘输入?那么肯定免不了调用Win32API了。所以查看下Win32API是否提供了键盘输入的功能,找到发送按... 查看详情

如何监听windows虚拟键盘

在MicrosoftWindows中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的应用程序中比10年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程... 查看详情

wpf虚拟键盘如何不获得当前焦点

...时不拿走原有的focus不知道键盘控件是否和TextBox同在一个Windows中?如果是,将键盘控件按钮的Focusable属性置为False,当点击Button时,Input的焦点并不切换,并不需要写切换回的代码.如果在ButtonClick时想得到当前处于输入(inputable)状态的控... 查看详情

WPF 应用程序的虚拟触控键盘

...707:36:18【问题描述】:您好,我目前正在构建一个应该在Windows7操作系统上运行的WPF应用程序。用户将通过触摸屏与系统交互。我需要一个虚拟键盘,以便用户可以在系统中输入信息,但希望阻止他们访问诸如ctr+alt+del之类的控... 查看详情

如何禁用所有 WPF 应用程序的虚拟键盘?

...为所有应用程序执行此操作。我有触摸屏,当我从显示的Windows7中单击一些文本框虚拟键盘时。我不需要它,因为我在程序中拥有自己的键盘。请帮忙。谢谢。【问题讨论】:你能禁用整个操作系 查看详情

windows10虚拟桌面

Win键+Ctrl+D:创建新的虚拟桌面。Win键+Ctrl+F4:删除当前虚拟桌面。Win键+Ctrl+键盘左键:切换到相邻左侧的虚拟桌面。Win键+Ctrl+键盘右键:切换到相邻右侧的虚拟桌面。Win键+TAB:打开任务和虚拟桌面视图(松开键盘界面不会消失) 查看详情

触摸键盘隐藏 UI 元素 [Windows 10 和 WPF]

】触摸键盘隐藏UI元素[Windows10和WPF]【英文标题】:TouchKeyboardHidingUIElement[Windows10&WPF]【发布时间】:2021-08-0622:00:08【问题描述】:我正在使用.NET5为Windows10编写一个“可触摸”WPF应用程序。我一直在StackOverflow上寻找答案,但我... 查看详情

wpf禁用textbox的触摸后自动弹出虚拟键盘(代码片段)

...言&问题如下截图,TextBox,在触摸点击后,会自动弹出windows的虚拟键盘。如何,禁用键盘的自动弹出?调用虚拟键盘通过调用TapTip.exe或者osk.exe,主动弹出虚拟键盘详细调用可参考:c#调用windows虚拟键盘如何禁用键盘的弹出TextB... 查看详情

为啥在 tabcontrol 内的 WPF 文本框中单击时,Windows 10 键盘会出现并立即消失?

】为啥在tabcontrol内的WPF文本框中单击时,Windows10键盘会出现并立即消失?【英文标题】:Whydoeswindows10keyboardappearandimmediatelydissapearwhenclickinginWPFtextboxinsidetabcontrol?为什么在tabcontrol内的WPF文本框中单击时,Windows10键盘会出现并立即... 查看详情

wpf禁用textbox的触摸后自动弹出虚拟键盘(代码片段)

...言&问题如下截图,TextBox,在触摸点击后,会自动弹出windows的虚拟键盘。如何,禁用键盘的自动弹出?调用虚拟键盘通过调用TapTip.exe或者osk.exe,主动弹出虚拟键盘详细调用可参考:c#调用windows虚拟键盘如何禁用键盘的弹出TextB... 查看详情

c# Windows 10 虚拟键盘问题

】c#Windows10虚拟键盘问题【英文标题】:c#Windows10virtualkeyboardissues【发布时间】:2016-11-0318:25:15【问题描述】:我开发了一个c#代码sn-p来确定虚拟(屏幕)键盘是否显示。以下代码在Windows7、8和8.1中运行良好,但在Windows10中,IsKey... 查看详情

使用 C#/Windows API 的虚拟键盘 - 发送键输入,但不获取焦点

】使用C#/WindowsAPI的虚拟键盘-发送键输入,但不获取焦点【英文标题】:VirtualKeyboardusingC#/WindowsAPI-sendkeyinput,butdon\'tgrabfocus【发布时间】:2013-01-0314:55:30【问题描述】:我正在用C#构建一个自定义的虚拟键盘。重点是将特定的按键... 查看详情

wpf 虚拟键盘在安装过程中不起作用

】wpf虚拟键盘在安装过程中不起作用【英文标题】:wpfvirtualkeyboardnotworkduringsetup【发布时间】:2016-02-2719:04:50【问题描述】:我是WPF应用程序的新手。我在WPF上做了一些小工作。在这里,我有一个文本框。当用户单击或点击虚拟... 查看详情

从 Windows 窗体过渡到 WPF

】从Windows窗体过渡到WPF【英文标题】:TransitioningfromWindowsFormstoWPF【发布时间】:2013-03-2812:05:18【问题描述】:很长一段时间以来,我一直坚持使用Windows窗体开发(从VB6开始,一直持续到C#.NET4.5),而且我几乎已经达到了Windows... 查看详情

LIstView 键盘导航类似于 WPF 中的 Windows 资源管理器

】LIstView键盘导航类似于WPF中的Windows资源管理器【英文标题】:LIstViewkeyboradnavigationlikeWindowsExplorerinWPF【发布时间】:2012-01-0102:29:33【问题描述】:我希望在Windows资源管理器的IconView中使用键盘导航,即如果我们移动到屏幕选择... 查看详情

用于多个输入字段的虚拟键盘

】用于多个输入字段的虚拟键盘【英文标题】:VirtualKeyboardformultipleinputfields【发布时间】:2020-10-1409:39:07【问题描述】:我发现了这个名为“simple-keyboard”的虚拟键盘,它只适用于一个输入字段。来自键盘的输入仅插入到第一... 查看详情

触摸按钮命令执行问题 | WPF |虚拟机 |视窗 10

...视窗10【英文标题】:Buttoncommandexecutionissuewithtouch|WPF|MVVM|Windows10【发布时间】:2021-07-0410:08:09【问题描述】:我正在使用MVVM模式在Windows10上运行的WPF应用程序中使用一个简单的按钮,以使用触摸监视器通过命令绑定执行单击​... 查看详情

如何知道哪个进程正在使用键盘在 Windows 10 中输入?

】如何知道哪个进程正在使用键盘在Windows10中输入?【英文标题】:HowcanIknowwhichprocessisusingthekeyboardtoinputinwindows10?【发布时间】:2021-11-0208:32:15【问题描述】:在windows10中如何知道哪个进程正在使用键盘输入?【问题讨论】:请... 查看详情