WPF文本框删除焦点上的货币格式

时间:2013-05-20 18:57:14

标签: wpf

是否可以在焦点上删除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时,焦点位于$之前。这意味着用户必须再次单击或使用箭头键移动到数字。

当用户选中上述文本框时,应删除货币符号。谢谢你的帮助。

3 个答案:

答案 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";
}