我有一个文本框绑定到一个十进制值(属性),当我键入“3”。它不允许我进入,因为它将它解析回3,因此我失去了“。”。我尝试了像Delay/LostFocus等解决方案,但从WPF validation rule preventing decimal entry in textbox?不适用于我。无法输入“。”在一个带有十进制绑定的文本框中
我现在写了一个IValueConverter类,我显然没有正确地做。下面是代码:
[ValueConversion(typeof(decimal), typeof(string))]
public class DecimalToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//return Decimal.Parse(value.ToString());
if (value == null) return Decimal.Zero;
if (!(value is string)) return value;
string s = (string)value;
int dotCount = s.Count(f => f == '.');
Decimal d;
bool parseValid = Decimal.TryParse(s, out d);
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("^[-+]?([0-9]*?[.])?[0-9]*$");
bool b = regex.IsMatch(s);
if (dotCount == 1 && b)
{
return s;
}
return d;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.ToString() : "";
}
}
XAML
<TextBox x:Name="ValueTextBox" Grid.Column="0" Grid.RowSpan="2" VerticalContentAlignment="Center" Text ="{Binding Value, Converter={StaticResource DecimalToStringConverter}}" PreviewTextInput="ValueTextBox_OnPreviewTextInput" TextWrapping="Wrap" MouseWheel="ValueTextBox_MouseWheel" PreviewKeyDown="ValueTextBox_PreviewKeyDown" PreviewKeyUp="ValueTextBox_PreviewKeyUp" TextChanged="ValueTextBox_TextChanged" BorderThickness="1,1,0,1"/>
请告知我该如何纠正这种... 感谢
感谢,当你说事件(只)..ü意味着摆脱所有的其他事件? ?? – ababeel
是的。至少在文本框中只接受十进制值。 – mm8