使用 WPF C# 实现 Gmail 风格的电子邮件输入控件,包含验证





5.00/5 (2投票s)
使用 C# 实现 WPF Gmail 风格的电子邮件输入控件,并进行电子邮件验证
引言
如果您想创建一个 WPF 控件,允许用户像在 Gmail 客户端中一样输入电子邮件,那么它就在这里。您可以在源代码中的 MultiSelectTextBox.xaml 文件中找到控件的实现。我将简要地描述它(简要 - 因为我相信您需要了解它的工作原理的一切都在源代码中)。
此控件的工作方式与浏览器客户端中的 gmail 或 yandex 电子邮件输入控件相同

- 可以通过点击打开窗口右侧的“^”按钮找到可用的电子邮件列表。可以通过双击它或使用 Enter 键选择电子邮件。
- 要添加新的电子邮件,您应该将光标设置到空白处,输入电子邮件并按 Enter 键。如果电子邮件不正确,您将收到错误消息,输入字段将用红色画布突出显示。
- 在您输入电子邮件时,您将看到带有自动过滤电子邮件的列表框。
- 已选择的电子邮件将在下拉列表框中隐藏,因此您将无法两次选择它们。要删除选定的电子邮件,您应该按 Back 按钮,或点击电子邮件地址附近的红色叉号。
- 所有新的电子邮件地址都将添加到全局列表(在
listbox
中),但您只能在它们不在上面的选定电子邮件列表中时才能看到它们。
Using the Code
控件使用标准的 WPF 验证功能,例如 Binding.ValidationRules
<TextBox.Text>
<Binding Path="Email" NotifyOnValidationError="True">
<Binding.ValidationRules>
<ExceptionValidationRule/>
<local:EmailValidationRule></local:EmailValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
以及 C# 代码方面
public class EmailValidationRule : ValidationRule
{
public EmailValidationRule()
{
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string Text = value as string;
if (Text != null && Text.Length>0
&& !Regex.IsMatch((string)value,
@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"))
{
return new ValidationResult(false, "Incorrect email format");
}
else
{
return new ValidationResult(true, null);
}
}
}
以及在 MultiSelectTextBox
类内部
#region Validation members
public string Email
{
get;
set;
}
private void validationError(object sender, ValidationErrorEventArgs e)
{
if (!m_popup.IsOpen &&e.Action == ValidationErrorEventAction.Added)
{
MessageBox.Show(e.Error.ErrorContent.ToString());
}
}
#endregion
关注点
我被要求在最终面试之前创建此控件作为技能测试。该控件正在工作,并且可以为那些想要学习 WPF 的人提供一个良好的开端。