2

有些事情我无法理解。只是希望有人可以帮忙。

我有一个绑定到 DateTime 属性的 WPF 文本框,如下所示;

<TextBox Text="{Binding DOB, StringFormat='{}{0:dd/MM/yyyy}'}" />

如果我输入文本“01/30/2013”​​,它会正确转换并将其显示为“30/01/2013”​​。如果我输入文本“30/01/2013”​​,则会引发验证错误,因为它期望 INPUT 的格式为 MM/dd/YYYY。

如何更改输入格式?我意识到我可以编写一个自定义转换器。我只是想知道是否还有其他方法?

谢谢

4

2 回答 2

1

试试这个技巧。在文件中添加Startup事件句柄:App.xaml

<Application x:Class="YourClass.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Startup="Application_Startup" ... />

App.xaml.cs添加这个:

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
            new FrameworkPropertyMetadata(System.Windows.Markup.XmlLanguage.GetLanguage(System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag)));
    }
}            

现在,日期应该根据当前的文化显示,所以当您以他们的文化格式输入日期时,不应该出现验证错误。

于 2013-08-28T05:18:27.660 回答
0

在调试模式下运行它,我得到以下转换失败:

ConvertBack 无法转换值“30/01/2013”​​(类型“字符串”)。绑定表达式:路径=日期;DataItem='MainWindowViewModel' (HashCode=19342748); 目标元素是'TextBox'(名称='');目标属性是“文本”(类型“字符串”) FormatException:“System.FormatException:字符串未被识别为有效的 DateTime。

看起来它使用了一个默认转换器,它使用了类似DateTime.Parse.

以下失败,但有同样的例外:

var date = DateTime.Parse("30/01/2013");

看起来您唯一的选择是编写自己的转换器。

于 2013-08-28T02:17:57.460 回答