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

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

您可以编写触发器,当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";
}

相关内容

  • 没有找到相关文章

最新更新