Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF StringFormat在.NET3.5和4.0中有所不同_C#_.net_Wpf - Fatal编程技术网

C# WPF StringFormat在.NET3.5和4.0中有所不同

C# WPF StringFormat在.NET3.5和4.0中有所不同,c#,.net,wpf,C#,.net,Wpf,在属性绑定中使用StringFormat时,.Net 3.5和4.0之间有什么区别 我有一个WPF窗口,只有一个文本框,它的文本属性绑定到类型为double的属性。在3.5中,当我编辑数字时,文本框按预期工作,但在4.0中,我只能编辑小数点的一侧,使用退格或删除会导致出现奇怪的格式并覆盖数据。展示这一点的最佳方式是尝试针对不同框架的示例 <TextBox FontSize="16" Text="{Binding Path=SetPoint, UpdateSourceTrigger=Pro

在属性绑定中使用StringFormat时,.Net 3.5和4.0之间有什么区别

我有一个WPF窗口,只有一个文本框,它的文本属性绑定到类型为double的属性。在3.5中,当我编辑数字时,文本框按预期工作,但在4.0中,我只能编辑小数点的一侧,使用退格或删除会导致出现奇怪的格式并覆盖数据。展示这一点的最佳方式是尝试针对不同框架的示例

 <TextBox FontSize="16" Text="{Binding Path=SetPoint, UpdateSourceTrigger=PropertyChanged, StringFormat=0.000}"  Margin="185,130,209,146" />

我还注意到,当我删除UpdateSourceTrigger时,.NET4.0的工作原理与3.5版本类似。不同版本中的UpdateSourceTriggers是否颠倒了

 <TextBox FontSize="16" Text="{Binding Path=SetPoint, StringFormat=0.000}"  Margin="185,130,209,146" />

标准WPF在xaml代码中有点不同,使用:

.., StringFormat={}{0:C2}}"
.., StringFormat={}{0:dd/MM/yyyy}}"
其他样本:

我相信这个问题描述了您所看到的问题

在3.5中,绑定会在每次击键后将新值写回源代码,而不会更改文本框文本。但该文本可能无法准确表示源的值,可能是因为它不包含格式和转换,或者是因为源将值(在属性setter中)更改为其他内容。这导致了频繁而激烈的抱怨——人们希望TextBox显示源代码的值,就像TextBlock使用相同的转换器和格式绑定到相同的属性一样。UI应该显示数据中的实际内容,而不是最终用户键入的内容

为了修复4.0中的这类错误,绑定现在在每次更新后对源的新值应用格式化和转换。(LostFocus绑定已经在3.5中实现了这一点。)文本框现在显示数据中的内容,但这会使用户的键入更加复杂


感谢您提供的链接,但在.NETV3.5和4.0之间切换时,我仍然存在相同的问题。我想知道为什么两个版本之间的格式处理不同?嗯,需要测试才能找到答案。我相信如果您遵循正确的默认“StringFormat”也会起作用。我确实使用了在这些链接中找到的格式进行了尝试,但结果仍然相同。建议使用特殊格式:(MaskedTextBox)您是否尝试在3.5和4.0中显式地将UpdateSourceTrigger设置为相同的值?关于如何检查默认值的链接,谢谢!我想这正是我所看到的。对我来说,保持3.5中的方式似乎更好,因为我看到使用该应用程序的客户端会对这种行为感到非常困惑。