【问题标题】:WPF StringFormat different in .Net 3.5 and 4.0WPF StringFormat 在 .Net 3.5 和 4.0 中不同
【发布时间】:2012-06-30 09:47:13
【问题描述】:

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

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

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

我还注意到,当我删除 UpdateSourceTrigger 时,.Net 4.0 就像 3.5 版本一样工作。不同版本中的 UpdateSourceTriggers 是否颠倒了?

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

【问题讨论】:

标签: c# .net wpf


【解决方案1】:

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

.., StringFormat={}{0:C2}}"
.., StringFormat={}{0:dd/MM/yyyy}}"

其他示例:
http://elegantcode.com/2009/04/07/wpf-stringformat-in-xaml-with-the-stringformat-attribute/
http://www.codeproject.com/Articles/195436/Formatting-text-in-Silverlight-XAML-using-StringFo

【讨论】:

  • 感谢您的链接,但在 .Net v3.5 和 4.0 之间切换时我仍然遇到同样的问题。我想知道为什么两个版本的格式处理方式不同?
  • 好吧,必须测试才能找到。我相信,如果您遵循正确的默认“StringFormat”也可以。
  • 我确实使用这些链接中的格式进行了尝试,但结果仍然相同。
  • 推荐使用特殊格式:wpftoolkit.codeplex.com (MaskedTextBox)
【解决方案2】:

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

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

为了修复 4.0 中的此类错误,绑定现在在每次更新后将格式设置和转换应用于源的新值。 (LostFocus 绑定在 3.5 中已经这样做了。)TextBox 现在显示数据中的内容,但这会使用户的输入更加复杂。

【讨论】:

  • 谢谢!我认为这正是我所看到的。对我来说,保持它在 3.5 中的方式会更好,因为我看到使用该应用程序的客户对这种行为感到非常困惑。
猜你喜欢
  • 2011-12-04
  • 2011-09-07
  • 2013-12-03
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多