【问题标题】:WPF ComboBox culture not being applied to valuesWPF ComboBox 文化未应用于值
【发布时间】:2012-10-08 18:06:51
【问题描述】:

我有一个组合框,它通过转换器绑定到双打集合,该转换器仅用于从关联属性的名称中定位集合。组合框位于属性网格编辑器的 DataTemplate 中。问题是组合框不显示当前系统文化中的值(即使用“,”作为小数分隔符,而不是“。”)。属性网格中的所有其他属性都正确显示(例如在文本框中)。

DataTemplate 看起来像这样,而 ListComboBoxValuesConverter 只返回一个双精度集合。

<ComboBox 
   ItemsSource="{Binding Converter={StaticResource ListComboBoxValuesConverter},
        RelativeSource={RelativeSource AncestorType={x:Type propgrid:IPropertyDataAccessor}}}"
   Text="{Binding Path=Value,
        RelativeSource={RelativeSource AncestorType={x:Type propgrid:IPropertyDataAccessor}}, 
        Mode=TwoWay,
        ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
</ComboBox>

谢谢

编辑:

我想出的解决方案是为组合框设置项目模板,并使用转换器将值作为格式正确的字符串返回。感觉这应该是不必要的,但你去吧!

<ComboBox.ItemTemplate>
   <DataTemplate>
       <Label Content="{Binding Converter={StaticResource FloatValueCultureConverter}, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}"/>
   </DataTemplate>
</ComboBox.ItemTemplate>

【问题讨论】:

    标签: c# wpf combobox


    【解决方案1】:

    也许问题可能出在转换器上,尝试使用作为参数传递给转换器的 CultureInfo 返回 toString(从双精度到字符串的转换器):

    return someDouble.ToString(culture);
    

    【讨论】:

    • 转换器返回整个双打集合,而不是单独返回每一个。我想如果需要,转换器可以将它们作为字符串集合返回,但似乎组合框应该知道如何以正确的文化显示双打。
    • 好的,然后尝试返回一个字符串列表,并为每个字符串创建 .ToString(culture)。检查这是否有效,我认为必须在绑定上设置文化。如果您定义一个绑定,您将替换默认绑定。
    • 谢谢,这确实有效,但是因为转换器正在返回一个列表,所以当列表更改时,组合框中不会出现这种情况,而无需关闭重新打开视图。我使用项目模板做了类似的事情。
    【解决方案2】:

    您需要将 ComboBox 或任何包含元素上的 Language 属性设置为当前区域性的 ietf-Tag。如果要尊重用户区域设置的自定义,则必须将绑定的 ConverterCulture 设置为 currentuiculture。您可以在Localized Value Formatting in WPF 中找到有关此主题的详细信息。

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 2011-09-18
      • 1970-01-01
      • 2015-06-28
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      相关资源
      最近更新 更多