当我们在XAML中使用静态双精度值时,我们如何指定它们以哪种格式提供?
示例:
<Rectangle>
<Rectangle.Opacity>
<Binding Path="IsDimmed" Converter="{StaticResource boolToDoubleConverter}" ConverterParameter="0.8"/>
</Rectangle.Opacity>
</Rectangle>
使用转换器方法
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return double.Parse((string)parameter, culture);
}
问题是在机器上,小数由,
分隔,转换方法失败或返回错误的值。
我不想在Parse()
方法中设置InvariantCulture,因为转换器可能在某个地方用于解析用户输入,这就是应该仍然应用culture
参数的原因。 / p>
如果我将值指定为<sys:Double x:Key="dimValue">0.8</sys:Double>
的资源,则converter参数将变为double类型,但在解析之前会转换为字符串。
所以我想以某种方式指定该值以en-GB格式表示,如ConverterParameter="0.8" ConverterParameterCulture="en-GB"/>
。
这是否可能在某种程度上不需要创建一个浮肿的MultiValueConverter?
答案 0 :(得分:5)
您可以使用Binding
<Binding Path="IsDimmed" Converter="{StaticResource boolToDoubleConverter}"
ConverterParameter="0.8" ConverterCulture="en-GB"/>
属性来实现此目的:
{{1}}
答案 1 :(得分:3)
有时我会使用:
<TextBlock Grid.Column="3" Margin="3" Text="{Binding [Value], Mode=OneTime, StringFormat={}{0:N2}, ConverterCulture={x:Static glob:CultureInfo.CurrentCulture}}" HorizontalAlignment="Right" />
glob
的位置:
xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"