我正在使用 ValueConverter 将double
类型显示为货币。我想确保输入是有效的,所以我尝试使用我制作的这种验证方法。我唯一的问题似乎是我无法选择整个值(即 500.00 美元)并输入任何内容。如果未选择“$”,一切似乎都很好。我怎样才能解决这个问题?
XAML:
<TextBox Text="{Binding Converter={StaticResource MoneyConverter}, Path=fr}"
PreviewTextInput="ValidateMoney" DataObject.Pasting="TextBox_Pasting"/>
后面的代码:
private void ValidateMoney(object sender, TextCompositionEventArgs e) {
Regex rgx = new Regex(@"^(\$)[0-9]*[.]{0,1}[0-9]*$|^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
e.Handled = !rgx.IsMatch((sender as TextBox).Text.Insert((sender as TextBox).SelectionStart, e.Text));
}
public class MoneyConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value != null) {
double d;
string temp = value.ToString();
if (double.TryParse(temp, out d)) {
return String.Format("{0:C}", d);
} else {
return value;
}
} else {
return value;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
if (value != null) {
double d;
string temp = value.ToString();
if (double.TryParse(temp, out d)) {
return String.Format("{0:C}", d);
} else {
return value;
}
} else {
return value;
}
}
}