TextBox с триггером CurrencyFormat и PropertyChanged не принимает текстовое право - PullRequest
1 голос
/ 28 марта 2012

У меня есть TextBox в окне WPF, привязанном к свойству зависимости окна типа double (см. Ниже). Всякий раз, когда пользователь вводит TextBox, когда

  1. TextBox пусто или
  2. Весь текст выделен,

набранный текст принят неверно. Например: если я введу «5» в любом из этих сценариев, получающийся текст будет «$ 5,00», но курсор будет расположен перед «5», после «$». Если я пытаюсь ввести «52,1», я получаю «2,15,00 долл. США».

<Window x:Class="WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="154" Width="240" Name="ThisWindow"
        Background="{StaticResource {x:Static SystemColors.AppWorkspaceBrushKey}}">
    <Grid>
        <TextBox Text="{Binding ElementName=ThisWindow,
                                Path=Amount,
                                StringFormat={}{0:c},
                                UpdateSourceTrigger=PropertyChanged}"
                 VerticalAlignment="Center"
                 HorizontalAlignment="Center"
                 MinWidth="100" />
    </Grid>
</Window>

Если я удаляю атрибут UpdateSourceTrigger, он печатается правильно, но не поддерживает формат валюты.

Есть идеи?

1 Ответ

6 голосов
/ 28 марта 2012

Это вызвано тем, что он пытается применить форматирование после каждого нажатия символов.

В качестве альтернативы я обычно просто стилизую TextBox, поэтому форматирование применяется только тогда, когда оно не редактируется

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Text" Value="{Binding SomeValue, StringFormat=C}" />
    <Style.Triggers>
        <Trigger Property="IsKeyboardFocusWithin" Value="True">
            <Setter Property="Text" Value="{Binding SomeValue, UpdateSourceTrigger=PropertyChanged}" />
        </Trigger>
    </Style.Triggers>
</Style>
...