在XAML中,我想使用StringFormat来显示数值,而不会发生任何舍入.可能吗?

tol*_*sm7 9 c# wpf xaml string-formatting

所以在我的XAML中我有这个:

<TextBlock Text="{Binding MyDecimalProperty, StringFormat={}{0:#.###}}"/>
Run Code Online (Sandbox Code Playgroud)

当MyDecimalProperty的值是例如5.35570256时,显示的TextBlock值是5.356

有没有办法让TextBlock显示5.355(即截断数字而不是舍入它)使用StringFormat?

我知道我可以使用值转换器,但我想知道我是否可以使用StringFormat或XAML中定义的任何其他内容来实现相同的功能.

更新:人们一直在想我为什么不想使用转换器.请以粗体显示.这不是我不想要的; 我只是想知道我是否可以使用StringFormat或任何其他XAML构造做同样的事情.

谢谢.

Ωme*_*Man 1

如果我可以使用 StringFormat 或 XAML 中定义的任何其他内容来实现相同的效果

StringFormat 特定于绑定标记扩展(实际上是绑定基础BindingBase.StringFormat Property (System.Windows.Data)),并最终使用 .Net 字符串格式,例如ToString("G3")(请参阅标准数字格式字符串),它会舍入且不截断;因此不可能在 Xaml 中覆盖此类功能。


在视图模型上创建另一个属性,它是一个关联string类型,它只是模仿所需的值,但被截断了。然后就这样绑定。

视图模型

public decimal TargetDecimal
{
    get { return _TargetDecimal; }
    set { _TargetDecimal = value; 
        OnPropertyChanged("TargetDecimal"); 
        OnPropertyChanged("TargetValueTruncated"); }
}

// No error checking done for example
public string TargetValueTruncated
{
  get { return Regex.Match(_TargetDecimal.ToString(), @"\d+\.\d\d\d").Value; }
}
Run Code Online (Sandbox Code Playgroud)

沙姆尔

<TextBlock Text="{Binding TargetDecimal, StringFormat=Original:   {0}}"/>
<TextBlock Text="{Binding TargetDecimal, StringFormat=Modified:   {0:#.###}}"/>
<TextBlock Text="{Binding TargetValueTruncated, StringFormat=Truncated: {0}}"/> 
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述