Chr*_*heD 10 .net c# wpf xaml .net-4.0
在将应用程序从.NET 3.5引入.NET 4.0时,我遇到了这个特殊的问题.
(文化是nl-BE)
我将这样的TextBox(在XAML中)与PropertyChanged上的UpdateSourceTrigger绑定到DateTime值(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>
Run Code Online (Sandbox Code Playgroud)
现在,当这个文本框的内容是(例如)10/12/2000并且我想将它编辑为09/03/1981 时,当我将光标放在2000年底并开始'退格时' 发生了一些令人讨厌的自动修正 '离开年份值(当只有'2000'的第一个数字('2')自动离开时 - 包括光标跳转 - 再次变为2002).我可以禁用此自动更正吗?
我似乎无法找到具体介绍此行为的内容.FormatString=c
对于货币值,也会出现相同的"问题" .
到目前为止我尝试过的:
{0}{dd/MM/yyyy}
(同样的问题:当剩下2位数字时开始自动更正).禁用我已添加到App.xaml.cs的以下代码段:
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)这个片段的原因首先包含在内:看一下这个链接.
我错过了一些明显的东西吗?我无法在3.5中重现这一点.我是否真的必须推出自己的ValueConverters才能使其正常工作?这看起来像是StringFormat
在3.5 sp 1中引入的退步.
DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns('d')
确实的输出看起来略有不同,但没有什么可以立即解释行为(可能不相关):
.NET 3.5 .NET 4.0 d/MM/yyyy d/MM/yyyy d/MM/yy d/MM/yy dd-MM-yy dd-MM-yy dd.MM.yy dd.MM.yy yyyy-MM-dd dd.MMM.yyyy yyyy-MM-dd
我现在最终使用了类似的方法,但我对解决上述问题的其他方法非常感兴趣:
public class CustomDateTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
if (value == null) { return ""; }
DateTime dt;
if (DateTime.TryParse(value.ToString(), CultureInfo.CurrentCulture,
DateTimeStyles.None, out dt))
{
return dt.ToShortDateString();
}
return "";
}
public object ConvertBack(object value, Type targettype, object parameter,
CultureInfo culture)
{
if (value == null || value.ToString().Trim().Length==0) { return null; }
string frmt = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
DateTime dt;
if (DateTime.TryParseExact(value.ToString(), frmt,
CultureInfo.CurrentCulture,
DateTimeStyles.None, out dt))
{
return dt;
}
return DependencyProperty.UnsetValue;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
841 次 |
最近记录: |