6

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

当用户点击上面的文本框时,货币符号应该被删除。谢谢你的帮助。

4

3 回答 3

12

您可以编写将在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>
于 2013-05-20T19:38:28.413 回答
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如果这不能解决问题,那么在您的视图模型中,您的属性在幕后正在添加格式。由于该代码不是问题的一部分,因此除非您编辑帖子并包含相关代码,否则我无法为您提供帮助。

于 2013-05-20T19:03:34.657 回答
0

如何使用属性设置字符串格式而不是在 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";
}
于 2013-05-20T19:26:39.397 回答