如何在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的情况下,这可能吗?
您可以将Binding
的ConverterCulture
属性用于此目的:
<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"