Jeśli wiążę Text
w TextBox
do właściwości float, wówczas wyświetlany tekst nie honoruje systemu dziesiętnego (kropka lub przecinek). Zamiast tego zawsze wyświetla kropkę ("."). Ale jeśli wyświetlam wartość w MessageBox
(przy użyciu ToString()), to jest używany poprawny system dziesiętny.TextBox nie honoruje System dziesiętny (kropka lub przecinek)
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>
kod za
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());
}
jak na razie, mam rozwiązać ten z konwerterem, który zastępuje kropki z dziesiętnym systemie (który działa), ale jaki jest tego powód? Czy jest to zgodne z projektem i czy istnieje łatwiejszy sposób rozwiązania tego problemu?
SystemDecimalConverter (w przypadku, ktoś inny ma ten sam problem)
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];
}
}
+1, to świetnie! Dzięki! Nie masz czasu na przeglądanie linków podanych w tej chwili, ale sprawdzę je, gdy tylko dostanę czas. Tak więc poczekam kilka godzin, zanim zaakceptuję twoją odpowiedź, żeby sprawdzić, czy ktoś coś wymyśli! Świetna robota –