46 lines
1.8 KiB
C#
46 lines
1.8 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Windows.Data;
|
|
|
|
namespace CtrEditor.Converters
|
|
{
|
|
public class RegionalFloatConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value is float floatValue)
|
|
{
|
|
// Usar la cultura actual para mostrar el número con el separador decimal correcto
|
|
return floatValue.ToString("N4", CultureInfo.CurrentCulture);
|
|
}
|
|
return value?.ToString() ?? string.Empty;
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (value is string stringValue)
|
|
{
|
|
// Intentar parsing con la cultura actual primero
|
|
if (float.TryParse(stringValue, NumberStyles.Float, CultureInfo.CurrentCulture, out float result))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
// Si falla, intentar con cultura invariante (punto como separador)
|
|
if (float.TryParse(stringValue, NumberStyles.Float, CultureInfo.InvariantCulture, out result))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
// Si ambos fallan, intentar reemplazar punto por coma o viceversa
|
|
string adjustedString = stringValue.Replace(',', '.').Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
|
|
if (float.TryParse(adjustedString, NumberStyles.Float, CultureInfo.CurrentCulture, out result))
|
|
{
|
|
return result;
|
|
}
|
|
}
|
|
|
|
return 0.0f; // Valor por defecto si no se puede parsear
|
|
}
|
|
}
|
|
} |