gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:19 24 4
gpt4 key购买 nike

我有一个绑定(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com