我将标准的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的本地化字符串表示时存在一些问题,但为什么日期选择器会忽略本地化?我该如何解决?
答案 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中。