gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:56:22 30 4
gpt4 key购买 nike

我想禁止在 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 虚拟键盘中输入此表情符号后不会调用 LoginPreviewTextInput(它适用于所有其他表情符号)。

Happy Emoji 就是下图所示的那个:

enter image description here

将开心的表情输入文本框后,文本框如下所示:

enter image description here

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

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

最佳答案

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

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

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

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

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

这是当您按下“快乐脸”时显示的内容:

Image showing the smiley symbol

这是当你按下“Love eyes face”时显示的内容:

Image showing the character code

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

你如何解决你的问题?

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

关于c# - 从 Windows 10 虚拟键盘输入 WPF 文本框的快乐表情符号未在文本框的 PreviewTextInput 事件中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50926362/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com