XAML TextBlock XML: формат строки для отображения числа

#xml #xaml #string-formatting #textblock

#xml #xaml #форматирование строки #текстовый блок

Вопрос:

Мои XML-данные:

 <Num>12.6</Num>
  

Я привязываю это к текстовому блоку XAML и хочу отобразить значение в виде округленного числа без десятичной точки. Поэтому это значение должно отображаться как 13. Аналогично, 12.2 должно отображаться как 12 и т.д.

Мне нужен код в StringFormat ниже (в …), чтобы делать то, что я хочу:

 <TextBlock Text= "{Binding Num, StringFormat=...}" />
  

Спасибо.

Ответ №1:

Попробуйте использовать конвертер:

 public class StringToDoubleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return double.Parse(value as string);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
  

Затем в xaml объявите конвертер:

 <UserControl.Resources>
    <local:StringToDoubleConverter x:Key="StringToDoubleConverter"/>
</UserControl.Resources>
  

И, наконец, используйте его в привязке вместе со StringFormat:

 <TextBlock Text= "{Binding Num, StringFormat=n0, Converter={StaticResource StringToDoubleConverter}}" />
  

Ноль в n0 указывает на отсутствие десятичных знаков (строки стандартного числового формата)

Комментарии:

1. Он по-прежнему отображает строку точно с десятичной запятой и без округления. Должен ли я выполнять какое-либо преобразование? Я подозреваю, что значение в настоящее время обрабатывается как строка. Возможно, мне придется как-то указать, что это число. Спасибо.

2. Это странно. Для меня это работает безупречно, поскольку число равно двойному. Попробуйте использовать n2 вместо n0, чтобы посмотреть, показывает ли он 2 знака после запятой. Кроме того, каков тип Num ?

3. Я не указываю тип Num, кроме того, что он отображается в текстовом блоке. Означает ли это, что он имеет тип string ? Вот почему я задаюсь вопросом о преобразовании.

4. Вам не нужно указывать тип. Это автоматически определяется привязкой. Это будет работать, только если Num является двойным, десятичным или плавающим.

5. Итак, как и где мне указать, что Num является двойным, десятичным или плавающим? Спасибо.