Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框不';t表示十进制(点或逗号)_C#_Wpf_Textbox_Wpf Controls_Culture - Fatal编程技术网

C# 文本框不';t表示十进制(点或逗号)

C# 文本框不';t表示十进制(点或逗号),c#,wpf,textbox,wpf-controls,culture,C#,Wpf,Textbox,Wpf Controls,Culture,如果将TextBox中的Text绑定到float属性,则显示的文本不符合系统小数(点或逗号)。相反,它总是显示一个点('.')。但是如果我在消息框中显示该值(使用ToString()),则使用正确的系统小数 Xaml <StackPanel> <TextBox Name="floatTextBox" Text="{Binding FloatValue}" Width="75" Height=

如果将
TextBox
中的
Text
绑定到float属性,则显示的文本不符合系统小数(点或逗号)。相反,它总是显示一个点('.')。但是如果我在
消息框中显示该值(使用ToString()),则使用正确的系统小数

Xaml

<StackPanel>
    <TextBox Name="floatTextBox"
             Text="{Binding FloatValue}"
             Width="75"
             Height="23"
             HorizontalAlignment="Left"/>
    <Button Name="displayValueButton"
            Content="Display value"
            Width="75"
            Height="23"
            HorizontalAlignment="Left"
            Click="displayValueButton_Click"/>
</StackPanel>
public MainWindow()
{
    InitializeComponent();
    FloatValue = 1.234f;
    this.DataContext = this;
}
public float FloatValue
{
    get;
    set;
}
private void displayValueButton_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show(FloatValue.ToString());
}
到目前为止,我已经用一个转换器解决了这个问题,它用十进制系统来代替点(这是可行的),但这是必要的原因是什么?这是设计的吗?有没有更简单的方法来解决这个问题

系统小数转换器(以防其他人有相同的问题)


看起来有一个解决方案:

下面是另一个可能有帮助的讨论:


+1,这太棒了!谢谢现在没有时间浏览您提供的链接,但我一有时间就会检查它们。所以在接受你的答案之前,我会等上几个小时,看看是否有人想出了什么主意!伟大的作品
public class SystemDecimalConverter : IValueConverter
{
    private char m_systemDecimal = '#';
    public SystemDecimalConverter()
    {
        m_systemDecimal = GetSystemDecimal();
    }
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.ToString().Replace('.', m_systemDecimal);
    }
    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.ToString().Replace(m_systemDecimal, '.');
    }
    public static char GetSystemDecimal()
    {
        return string.Format("{0}", 1.1f)[1];
    }
}