我在WPF窗口中有TextBox
绑定到double
类型窗口的依赖项属性(见下文)。每当用户输入TextBox
时
TextBox
为空,或错误地接受键入的文本。例如:如果我在这些场景中输入'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属性,它会正确键入,但不会保留货币格式。
有什么想法吗?
答案 0 :(得分:6)
这是因为它尝试在每次按下字符后应用格式。
作为替代方案,我通常只设置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>