C# WPF StringFormat在.NET3.5和4.0中有所不同
在属性绑定中使用StringFormat时,.Net 3.5和4.0之间有什么区别 我有一个WPF窗口,只有一个文本框,它的文本属性绑定到类型为double的属性。在3.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
<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中的方式似乎更好,因为我看到使用该应用程序的客户端会对这种行为感到非常困惑。