Wpf 会计编号文本框

Wpf 会计编号文本框,wpf,.net-core,textbox,double,Wpf,.net Core,Textbox,Double,在我的课堂上,我有一个数字属性 double number; public double Number { get => number; set { number = value; OnPropertyChanged(); } } 以这种方式绑定到xaml中的TextBox: <TextBox Text="{Binding Number, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"/> 当我启动应用程序时

在我的课堂上,我有一个
数字
属性

double number;
public double Number { get => number; set { number = value; OnPropertyChanged(); } }
以这种方式绑定到
xaml中的
TextBox

<TextBox Text="{Binding Number, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"/>

当我启动应用程序时,
TextBox
会自动获取
0.00
,这可能是因为默认情况下值类型是初始化的。如果我用TAB键指定
文本框
焦点,它不会选择
0.00
,因此我必须手动删除小数点前的第一个
0
,以便输入一些值。如果我键入一个整数,我会按预期得到尾随的
.00
,但如果我按。在数字键盘中,在整数部分后添加一些小数点,我在
文本框周围得到了一个红色装饰条,
.00
不会被删除!所以,不要逼我。然后输入数字,我要按→ 先到小数部分,然后键入数字

我希望当应用程序启动和我点击时,
文本框
为空/空。我希望尾部的
.00
被替换为我键入的任何内容,即
.25
,此后,如果我按下按钮来处理代码中的值,我希望
文本框
再次为空/空!怎么做


是否有任何屏蔽的
文本框
用于此目的?

A
double
是一种永远不能为
null
的值类型。如果希望
TextBlock
为空,则应绑定到默认值为
null
null

@很好,它解决了一半的问题,如果你习惯了按向右箭头而不是按下。对于小数点后的值,它实际上解决了整个问题。使用
Nullable
,是否有可能获得这样的意外值


否,
null可
属性只能设置为
double
值或
null
。没有别的了。换句话说,它接受与
double
null
(默认值(double?)完全相同的值

A
double
是一种永远不能为
null
的值类型。如果希望
TextBlock
为空,则应绑定到默认值为
null
null

@mm8,太好了,它解决了一半的问题,如果习惯按向右箭头而不是。对于小数点后的值,它实际上解决了整个问题。使用
null
,是否有可能得到这样的意外值


否,
Nullable
属性只能设置为
double
值或
null
值。除此之外,没有其他设置。换句话说,它接受与
double
null
完全相同的值(默认值(double?)

噢,这是绑定双精度的一个非常老的问题。您可能必须创建一个自定义转换器。这是我使用行为的一次。导致此问题的原因是每次用户按键时绑定都会传输其值。删除UpdateSourceTrigger=PropertyChanged,文本框的默认行为是在lostfocus上传输值,以便您可以键入和更正任意内容,直到您的选项卡离开为止。@EmonHaque我想他说的是一种自定义行为,以前在Windows中。交互性,现在在一个独立的包中。只有google WPF行为。是的,自定义。我有两段代码用于此操作。一个验证程序和一个行为。两者都带有参数设置诸如小数位数、最小值和最大值之类的内容。这看起来像我使用的东西之一。行为是nuget@EmonHaque:A
double
是一种永远不能为
null
的值类型。如果希望
TextBlock
为空,应该绑定到一个默认值为
null
null
。哦,这是绑定双精度的一个非常老的问题。您可能必须创建一个自定义转换器。这是我使用行为的一次。导致此问题的原因是每次用户按键时绑定都会传输其值。Remove UpdateSourceTrigger=PropertyChanged,textbox的默认行为是传输值在lostfocus上,您可以键入和更正任意内容,直到您的选项卡离开为止。@EmonHaque我想他说的是一种自定义行为,以前在Windows中。交互性,现在在一个独立的软件包中。只有google WPF行为。是的,自定义。我有两段代码用于此。一个验证程序和一个行为。它们都采用参数设置,例如小数位数,最小值和最大值。这看起来像是我使用的东西之一。行为是nuget@EmonHaque:A
double
是一种值类型,永远不能为
null
。如果希望
TextBlock
为空,应该绑定到一个默认值为
null
null