在i对象绑定到一个WPF控制我想显示属性,以根据不同的单元系统上的不同级别的精确度被使用。例如,如果值为真,我有一个属性IsMetric
我想显示一个小数位的值,如果它是假的,然后三位小数。目前,我将它添加到资源的调用之前的构造函数InitialiseComponent()
这样的静态资源字符串:DataTrigger上的StringFormat在WPF
public RoomDisplay(Room room)
{
string format = room.IsMetric ? "{0:0.0}" : "{0:0.000}";
this.Resources.Add("format", format);
InitializeComponent();
this.DataContext = room;
}
然后XAML中看起来是这样的:
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Breadth, StringFormat={StaticResource ResourceKey=format}}" TextAlignment="Right" />
这已经高达现在工作。然而,这种方法随着嵌入式控制而下降,我从未对这种方法感到满意。
我已经调查DataTriggers,沿着线的东西:
<DataTrigger Binding="{Binding IsMetric}" Value="true">
<Setter Property="Text" Value="{Binding Breadth, StringFormat=F1}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsMetric}" Value="false">
<Setter Property="Text" Value="{Binding Breadth, StringFormat=F3}"/>
</DataTrigger>
然而,这是一个痛苦添加到所有的TextBlocks。理想情况下,我想把它放入一个风格,但我不能找出一个方法来设置没有文本值的StringFormat。
的另一种选择是有对象的格式属性和绑定的StringFormat到,但我宁愿呆在远离这一切。有任何想法吗? 谢谢。
你有没有考虑多值转换器? – Paparazzi 2012-03-17 12:54:33
转换器也有你可以使用的'System.Globalization.CultureInfo culture'参数。 – Silvermind 2012-03-17 13:49:40