xaml StringFormat, который принимает "," в качестве десятичной точки - PullRequest
0 голосов
/ 04 мая 2020

У нас есть код для текстового поля, похожего на это:

 <TextBox  Width="120" Grid.Column="2" Text="{Binding xxxxx, StringFormat=\{0:F2\}%}"
                                        VerticalContentAlignment="Center" HorizontalAlignment="Left" >

Проблема в том, что пользователь настаивает на том, что он может использовать "," в качестве десятичной точки так как это было сделано на протяжении многих лет.

Так как теперь форматирование просто пропускает его, поэтому, если вы наберете 22,33%, то получится 2233%.

В любом случае, я могу заставить StringFormat принимать и "." и "," как десятичные точки, или мне нужно отформатировать его каким-либо другим способом (я новичок в WPF и xaml, так что, возможно, пропустил что-то очевидное)?

1 Ответ

1 голос
/ 04 мая 2020

Вы можете программно проанализировать значение с помощью преобразователя:

public class FormatConverter : IValueConverter
{
    private static readonly CultureInfo s_cultureInfo = new CultureInfo("de");

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
        ((decimal)value).ToString("F2") + "%";

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string a = value.ToString();
        decimal d;
        if ((a?.Contains(",") == true && decimal.TryParse(a, NumberStyles.Any, s_cultureInfo, out d))
            || decimal.TryParse(a, NumberStyles.Any, CultureInfo.InvariantCulture, out d))
            return d;

        return Binding.DoNothing;
    }
}

В приведенном выше примере реализации используется культура, которая поддерживает , при попытке преобразовать string, который содержит запятую, в decimal.

Вот как вы будете использовать его в разметке XAML:

<Window.Resources>
    <local:FormatConverter x:Key="conv" />
</Window.Resources>
...
<TextBox  Width="120" Grid.Column="2"
          Text="{Binding xxxxx, Converter={StaticResource conv}}"  />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...