我正在使用 mahapps.metro 为 UI 和 WPFLocalizeExtension 作为本地化提供程序在 WPF 中创建登录表单。
我的问题是我想在电子邮件文本框的 ValidationResult 中使用 DynamicLocalization,但没有成功。
我试着这样做:
** Form.xaml **
<TextBox x:Name="TextBoxEmail" HorizontalAlignment="Center" Margin="0,10" TextWrapping="Wrap" VerticalAlignment="Top" Width="400" Grid.Row="2">
<TextBox.Text>
<Binding Path="Email" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:EmailValidator ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
电子邮件验证器.cs
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using EmailValidation;
using System.Windows.Controls;
using System.Windows.Data;
namespace AppNamespace
{
public class EmailValidator : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string mail = (string)value;
if (IsValid(mail))
{
return ValidationResult.ValidResult;
}
var loc = new WPFLocalizeExtension.Extensions.LocExtension("EmailIncorrect");
return new ValidationResult(false, loc);
}
private static bool IsValid(string address)
{
return EmailValidation.EmailValidator.Validate(address);
}
}
}
但是这种方法只会导致 Localize 扩展的 ToString() 结果,它根本不翻译,而是字符串形式。
Loc:<key>