作者:若我倆有了愛 | 来源:互联网 | 2022-12-13 12:31
我想禁用在WPF应用程序的输入字段中输入所有Emojis(情感图标).我实现它的方式是:
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(它适用于所有其他Emojis).
快乐表情符号如下图所示:
当快乐表情符号输入文本框时,文本框如下所示:
快乐表情符号已输入文本框.您可以看到,当文本框的文本属性为空时,甚至会显示水印.当我在snoop中查看文本框的text属性时,它确实是空的,并且有界属性是viewmodel为空(从未调用setter).
同样,只发生在这个特定的表情符号(快乐的表情符号)上.所有其他表情符号都到达LoginPreviewTextInput方法,与正则表达式不匹配并被忽略.