WPF DatePicker选择不正确的日期

时间:2014-01-08 15:30:43

标签: c# wpf localization datepicker

我将标准的DatePicker绑定到我的代码隐藏中的属性,如下所示:

XAML:

<DatePicker Text="{Binding Start, Mode=TwoWay}" Width="150" BorderBrush="LightGray" VerticalAlignment="Center" Margin="3"/>

代码:

public DateTime Start
{
    get { return _start; }
    set
    {
        _start = value;
        RaisePropertyChangedEvent("Start");
    }
}

在构造函数中,我将值初始化为DateTime.Now,今天是1月8日。 2014年(这应该是不同语言的明确)。但是我在丹麦语机器上,因此字符串格式化的值将是2014年8月1日,而不是美国风格的1/8/2014。

第一个问题是日期选择器显示格式为美式的值,当我打开下拉列表时,它也会显示为8月1日。

但第二个问题更糟糕。当我选择例如12月1日从下拉开始,文字说12/1/2014,这在美国风格是正确的,但选择的实际日期时间(在酒店)是1月12日,这符合丹麦风格...

我猜这是因为在转换为/来自DateTime的本地化字符串表示时存在一些问题,但为什么日期选择器会忽略本地化?我该如何解决?

3 个答案:

答案 0 :(得分:1)

D'oh ...我绑定了Text属性而不是SelectedDate属性。

答案 1 :(得分:1)

为什么不只是附加到SelectedDate,您也可以控制DateFormat

答案 2 :(得分:0)

由于某些原因,当您将DateTime属性绑定到XAML中的DatePicker的文本时,无论您实际想要的文化是什么,发送到属性设置器的日期值都将处于EN-US文化中。 / p>

要解决此问题,您需要在应用程序启动时添加以下内容。

FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
    XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)));

这可能位于App.xaml.cs的Application_Startup()中,或者如果要在类库中加载WPF,则位于Main中。

查看此处-StringFormat Localization issues in wpf