【问题标题】:How to make a TextBox work properly with a formatted decimal value如何使用格式化的十进制值使 TextBox 正常工作
【发布时间】:2017-11-02 13:13:32
【问题描述】:

我有一个TextBox,它绑定了一个不可为空的十进制值。这是我下面的 XAML 代码。我需要UpdateSourceTriggerValidatesOnDataErrors=true

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

问题是在TextBox 上总是显示值 0.00。当我开始在TextBox 上输入时,0.00 总是在那里。要获取小数点后的值,应使用下一个箭头键。当输入小数点时,TextBox 允许使用两个小数点,但由于列出了属性的数据注释,它会显示错误,然后我们必须点击退格按钮来清除小数点零。如何使TextBox 在值为零时显示空字符串,当我开始输入时,TextBox 应该接受输入的值而不显示 0.00。

【问题讨论】:

  • 您的标题与问题的其余部分不匹配,0 != null。请澄清。
  • 当你说“null”时,你的意思是“空字符串”,对吗?
  • 这可能是您的解决方案:stackoverflow.com/a/11478265/424129
  • 是的,一个空字符串。当文本框不在焦点上且文本框为空时,该值应为 0.00。
  • 通常我在IsKeyboardFocusWithin = true 时使用绑定文本属性而不格式化的DataTrigger。这样它在不集中时被格式化,或者在你输入数据时不被格式化。你可以在这里找到一个例子:stackoverflow.com/a/8680879/302677。如果要隐藏 0.00,只需添加另一个触发器,如果​​ value = 0,则 Text 为空白。

标签: c# wpf textbox


【解决方案1】:

没有对此进行测试:您可以使用 GotFocus 事件或类似事件并检查当前值是否为 0:

private void textbox1_GotFocus(Object sender, EventArgs e) {
    TextBox tb = (sender as TextBox);
    if(tb == null) return;

    decimal d = 0;
    if(Decimal.Parse(tb.Text, out d)) {
        if(d==0) tb.Text = String.Empty;
    }
}

也请查看 PreviewX 事件。例如。 PreviewKeyDown。

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多