c# - 无法在具有十进制绑定(bind)的文本框中输入 "."

标签 c# wpf data-binding

我有一个绑定(bind)到十进制值(属性)的文本框,当我键入“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"/>

请告诉我如何纠正这个... 谢谢

最佳答案

太烦人了。你不能按“。”但如果你向后移动一个角色,它会让你。这是因为“21”。不是有效的小数。

对我来说,我最终放弃了,把这个字段变成了一个字符串。一定有更好的方法,但它让我解决了我的用例的问题。然后您还需要检查以确保它是一个数字等,但至少用户体验是他们所期望的。

关于c# - 无法在具有十进制绑定(bind)的文本框中输入 ".",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233084/

相关文章:

c# - 具有自定义用户控件的多阶段数据绑定(bind)

c# - 从 XML 名称标签中删除无效字符 - RegEx C#

c# - 如何在 LINQPad 中显示 FolderBrowserDialog?

c# - 无法反序列化 XML

wpf - 属性更改后列表框不刷新

wpf - "{Binding Path=.}"在 WPF 绑定(bind)中意味着什么?

c# - 有没有办法在自定义 System.Security.IPermission 实现中修复此 FxCop CA2103 警告?

.net - 为什么 FrameworkElement 的 FindResource() 方法接受对象而不是字符串?

C# DataGrid 填充了多层列表

wpf - 在 WPF 中创建可点击的图像