【发布时间】:2011-06-14 21:53:56
【问题描述】:
在将应用程序从 .NET 3.5 迁移到 .NET 4.0 时,我遇到了这个特殊问题。
(文化是 nl-BE)
我将这样的文本框(在 XAML 中)绑定到 DateTime 值,并在 PropertyChanged 上使用 UpdateSourceTrigger(LostFocus 按预期工作,但需要进行输入时验证):
<TextBox Height="23" Margin="146,0,105,97.04" Name="txb_Geboortedatum" VerticalAlignment="Bottom">
<TextBox.Text>
<Binding Path="Geboortedatum" StringFormat="d"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
现在当这个文本框的内容是(例如)10/12/2000 并且我想将它编辑为 09/03/1981 一些令人讨厌的 自动更正发生,当我将光标放在 2000 年底并开始“退格”远离年份值时(当只有 '2000' 的第一个数字 ('2') 自动留下值时 -包括光标跳转 - 再次更改为 2002)。我可以禁用此自动更正吗?
我似乎找不到具体介绍这种行为的原因。对于货币价值,FormatString=c 也会出现同样的“问题”。
到目前为止我已经尝试过:
- 将 FormatString 更改为更明确的内容,例如
{0}{dd/MM/yyyy}(同样的问题:当年份剩下 2 位数时开始自动更正)。 -
禁用以下我已添加到我的 App.xaml.cs 的 sn-p:
FrameworkElement.LanguageProperty.OverrideMetadata( typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage( CultureInfo.CurrentCulture.IetfLanguageTag)));
首先包含此 sn-p 的原因:have a look at this link。
我在这里遗漏了一些明显的东西吗?我无法在 3.5 中重现这一点。我真的必须推出自己的 ValueConverters 才能使其正常工作吗?这看起来像是从 3.5 sp 1 中引入的 StringFormat 倒退了一步。
DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns('d') 的输出看起来确实略有不同,但没有什么可以立即解释这种行为(可能不相关):
【问题讨论】:
-
~相关:stackoverflow.com/questions/2852106/…(虽然这里也没有真正的解决方法——答案只是说“恢复到 lostfocus 而不是 propertychanged”,但这并不是我真正需要的)。它确实适用于 3.5...