是否可以在焦点上删除WPF文本框上的货币格式?该应用程序遵循MVVM。
<TextBox HorizontalAlignment="Left"
Height="23"
Margin="156,264,0,0"
TextWrapping="Wrap"
HorizontalContentAlignment="Right"
Text="{Binding Amount, StringFormat=c, ValidatesOnNotifyDataErrors=True}"
VerticalAlignment="Top"
Width="100" />
我需要格式化,而文本框没有焦点。但只有当它具有焦点以便用户轻松编辑时才需要将其删除。删除$的原因是,当您选择Tab时,焦点位于$之前。这意味着用户必须再次单击或使用箭头键移动到数字。
当用户选中上述文本框时,应删除货币符号。谢谢你的帮助。
答案 0 :(得分:7)
您可以编写在TextBox
关注时执行的触发器,以及您可以更改StringFormat
的时刻。
TextBox
样式:
<TextBox TextWrapping="Wrap"
Height="23" Width="200"
HorizontalAlignment="Left" HorizontalContentAlignment="Right" VerticalAlignment="Top">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Text" Value="{Binding Amount, StringFormat=C, UpdateSourceTrigger=LostFocus}" />
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value="True">
<Setter Property="Text" Value="{Binding Amount, StringFormat=F2, UpdateSourceTrigger=LostFocus}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
答案 1 :(得分:0)
删除StringFormat=c
。
<TextBox HorizontalAlignment="Left" Height="23" Margin="156,264,0,0" TextWrapping="Wrap" HorizontalContentAlignment="Right"
Text="{Binding Amount, ValidatesOnNotifyDataErrors=True}" VerticalAlignment="Top" Width="100" />
如果这样做无法解决问题,那么幕后会在视图模型中添加格式的Amount
属性。由于该代码不是问题的一部分,除非您编辑帖子并包含相关代码,否则我无法帮助您。
答案 2 :(得分:0)
如何使用Property设置字符串格式而不是在XAML中指定字符串格式,在加载VM时将属性值设置为c并在TextBox GotFocus事件处理程序中将其更改为空字符串?
XAML:
StringFormat="{Binding MyStringFormat}"
视图模型:
private string myStringFormat;
public string MyStringFormat
{
get { return myStringFormat; }
set
{
myStringFormat= value;
NotifyPropertyChanged(m => m.MyStringFormat);
}
}
查看:
void MyTextBox_GotFocus(object sender, EventArgs e)
{
myvm = DataContext as MyViewModel;
if (myvm == null) return;
myvm.MyStringFormat = string.Empty;
}
void MyTextBox_LostFocus(object sender, EventArgs e)
{
myvm = DataContext as MyViewModel;
if (myvm == null) return;
myvm.MyStringFormat = "c";
}