如何在XAML转换器中指定格式区域性

本文关键字:定格 格式 区域性 转换器 XAML | 更新日期: 2023-09-27 17:58:40

当我们在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>将该值指定为资源,那么转换器参数将变为双重类型,但在解析之前将转换为字符串。

因此,我想以某种方式指定,该值以类似ConverterParameter="0.8" ConverterParameterCulture="en-GB"/>的en-GB格式表示。

在不需要创建一个膨胀的MultiValueConverter的情况下,这可能吗?

如何在XAML转换器中指定格式区域性

您可以将BindingConverterCulture属性用于此目的:

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

有时我使用:

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