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

v6ylcynt  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(125)

当我们在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>将值指定为资源,则转换器参数将变为双精度类型,但在解析之前将转换为字符串。
因此,我想以某种方式指定,该值以en-GB格式表示,如ConverterParameter="0.8" ConverterParameterCulture="en-GB"/>
这是否可能在某种程度上不需要创建一个臃肿的MultiValueConverter?

xxb16uws

xxb16uws1#

您可以使用BindingConverterCulture属性来达成此目的:

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

4ngedf3f2#

有时我会使用:

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

相关问题