【问题标题】:How to specify XAML value (e.g. converter parameter) culture如何指定 XAML 值(例如转换器参数)区域性
【发布时间】:2014-04-16 14:01:30
【问题描述】:

当我们在 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 参数的原因。

如果我使用&lt;sys:Double x:Key="dimValue"&gt;0.8&lt;/sys:Double&gt; 将值指定为资源,则转换器参数变为双精度类型,但在被解析之前被转换为字符串。

所以我想以某种方式指定该值以 en-GB 格式表示,例如 ConverterParameter="0.8" ConverterParameterCulture="en-GB"/&gt;

这是否可能以某种方式不需要创建一个蓬松的 MultiValueConverter?

【问题讨论】:

    标签: c# wpf xaml cultureinfo


    【解决方案1】:

    您可以为此目的使用BindingConverterCulture 属性:

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

    【讨论】:

    • 伙计,我的猜测很接近...... 8-)
    【解决方案2】:

    有时我会使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多