如何指定XAML值(例如转换器参数)文化

时间:2014-04-16 14:01:31

标签: c# wpf xaml cultureinfo

当我们在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?

2 个答案:

答案 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"