【问题标题】:WPF DatePicker selects incorrect dateWPF DatePicker 选择不正确的日期
【发布时间】:2014-01-08 15:30:42
【问题描述】:

我将标准 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 年(应该在不同语言之间明确)。但是我在丹麦机器上,所以字符串格式的值将是 8/1/2014,而不是美国风格的 1/8/2014。

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

第二个问题更糟。当我选择例如12 月 1 日从下拉列表中显示 12/1/2014,这在美国风格中是正确的,但实际选择的日期时间(在属性上)是 1 月 12 日,与丹麦风格相匹配...

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

【问题讨论】:

    标签: c# wpf localization datepicker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        请看这里 - StringFormat Localization issues in wpf

        【讨论】:

          猜你喜欢
          • 2012-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 2013-02-02
          相关资源
          最近更新 更多