C# 如何使用格式化的十进制值使文本框正常工作

C# 如何使用格式化的十进制值使文本框正常工作,c#,wpf,textbox,C#,Wpf,Textbox,我有一个文本框,它绑定了一个不可为空的十进制值。下面是我的XAML代码。我需要更新资源记录器和验证数据错误=true <TextBox Text="{Binding Quantity, StringFormat=f2, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" /> 问题在于文本框上始终显示值0.00。当我开始在文本框中键入时,0.00始终存在。要获取小数点后的值,应使用

我有一个
文本框
,它绑定了一个不可为空的十进制值。下面是我的XAML代码。我需要
更新资源记录器
验证数据错误=true

<TextBox 
    Text="{Binding Quantity, StringFormat=f2, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
    />


问题在于
文本框上始终显示值0.00。当我开始在
文本框中键入时,0.00始终存在。要获取小数点后的值,应使用下一个箭头键。键入小数点后,
TextBox
允许两个小数点,但由于列出了属性的数据注释,因此显示错误,然后我们必须单击backspace按钮清除小数点零。当值为零时,如何使
文本框
显示空字符串,当我开始键入时,
文本框
应接受键入的值,而不显示0.00

无需测试:您可以使用GotFocus事件或类似事件并检查当前值是否为0:

private void textbox1\u GotFocus(对象发送方,事件参数e){
TextBox tb=(发送方作为TextBox);
if(tb==null)返回;
十进制d=0;
if(Decimal.Parse(tb.Text,out d)){
如果(d==0)tb.Text=String.Empty;
}
}

再看看PreviewX事件。例如,PreviewKeyDown。

您的标题与问题的其余部分不匹配,
0!=空
。请澄清。当你说“空”时,你的意思是“空字符串”,对吗?这可能是你的解决方案:是的,空字符串。当文本框未处于焦点时,如果文本框为空,则值应为0.00。通常,当
IsKeyboardFocusWithin=true
时,我使用DataTrigger绑定文本属性而不格式化。这样,它在不聚焦时被格式化,或者在输入数据时被格式化。您可以在此处找到一个示例:。如果要隐藏0.00,只需添加另一个触发器,这样如果value=0,文本为空。