是否可以在焦点上删除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时,焦点在$之前。这意味着用户必须再次单击或使用箭头键移动到数字。
当用户标签到上面的文本框时,货币符号应该被删除。谢谢你的帮助。
您可以编写触发器,当TextBox
聚焦时执行,此时您可以更改StringFormat
。
TextBox
style:
<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>
移除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
属性的幕后正在做一些事情。由于该代码不是问题的一部分,除非您编辑您的帖子并包含相关代码,否则我无法帮助您。
如何使用属性来设置字符串格式,而不是在XAML中指定字符串格式,在虚拟机加载时将属性值设置为c,并在TextBox GotFocus事件处理程序中将其更改为空字符串?
XAML:StringFormat="{Binding MyStringFormat}"
ViewModel:
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";
}