如何在XAML转换器中指定格式文化

9

当我们在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参数的原因。
如果我将值指定为资源,例如<sys:Double x:Key="dimValue">0.8</sys:Double>,则转换器参数变为double类型,但在被解析之前会被强制转换为字符串。
因此,我想以en-GB格式指定值,如ConverterParameter="0.8" ConverterParameterCulture="en-GB"/>
是否有可能在不创建冗长的MultiValueConverter的情况下实现这一点?
2个回答

10

您可以使用BindingConverterCulture属性来实现此目的:

<Binding Path="IsDimmed" Converter="{StaticResource boolToDoubleConverter}" 
         ConverterParameter="0.8" ConverterCulture="en-GB"/>

1
我猜得真接近啊... 8-) - Dani

5
有时候我会使用:
<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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接