首页 > 解决方案 > 如何在 ValidationResult 中使用带有 mahapps.metro 和 wpflocalization 扩展的动态本地化?

问题描述

我正在使用 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>

标签: c#wpflocalizationmahapps.metrowpflocalizationextension

解决方案


推荐阅读